Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript闭包,相同的参数,但打印出不同的答案_Javascript - Fatal编程技术网

Javascript闭包,相同的参数,但打印出不同的答案

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

为什么当我两次运行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 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等等。