Javascript闭包,相同的参数,但打印出不同的答案
为什么当我两次运行console.log(action(8))时,会给出1108和2108的答案? 不是应该是1108和1108吗Javascript闭包,相同的参数,但打印出不同的答案,javascript,Javascript,为什么当我两次运行console.log(action(8))时,会给出1108和2108的答案? 不是应该是1108和1108吗 var counter = 100; //line 1 function make(){ var local = 1000; return function(x){ temp = local; local *= 2; return x + counter + temp; } } var
var counter = 100; //line 1
function make(){
var local = 1000;
return function(x){
temp = local;
local *= 2;
return x + counter + temp;
}
}
var action = make();
console.log(action(8)); // 1108
console.log(action(8)); // 2108
不,因为每次调用时,
local
都会发生变化
闭包的全部目的是捕获外部函数中的变量。否,因为
local
每次调用它时都会发生变化
闭包的全部目的是捕获外部函数中的变量。哦,亲爱的,缩进和换行发生了什么?为此,您必须获得独立的操作,如bellow<代码>var action1=make();var action2=make();console.log(action1(8));控制台日志(action2(8))代码>哦,天哪,缩进和换行发生了什么?为此,您必须获得独立的操作,如bellow<代码>var action1=make();var action2=make();console.log(action1(8));控制台日志(action2(8))代码>所以第二次运行console.log(操作(8))时,local=1108?不,它将是2000,因为每次都要加倍。在代码中,有一行内容是
local*=2
。我不确定您是否真正理解赋值运算符,但它相当于:local=local*2
。如果local是1000,每次乘以2,那么第二次调用local是2000,结果显然是2108。第三次调用它是4108,然后是8108、16108等等。所以第二次运行console.log(操作(8))时,local=1108?不,它将是2000,因为您每次都将其加倍。在代码中,您有一行内容为local*=2
。我不确定您是否真正理解赋值运算符,但它相当于:local=local*2
。如果local是1000,每次乘以2,那么第二次调用local是2000,结果显然是2108。第三次打电话是4108,然后是810816108等等。