我已经开始学习闭包了,虽然我已经开始了解它们,但有一部分没有意义。
在下面的代码中,当我调用原始函数addSomething()
时,计算不会发生,但是,当我将此函数分配给新变量var all = addSomething();
时,它会生成所需的函数结果即它进行数学运算并在控制台中返回6
。
有人可以解释两件事:
1)我这样做了吗?
2)为什么计算仅在将原始函数分配给新变量时执行?
我发现这部分非常令人困惑。
function addSomething() {
var a = 2,b = 4;
function addIt() {
var total = a + b;
return total;
}
return addIt;
}
var all = addSomething();
console.log(all());
答案 0 :(得分:3)
因为你要包装功能。第一个调用返回一个函数,第二个调用返回实际值。
您致电addSomething
,返回addIt
这是另一项功能。这就是为什么你需要第二个()
来获得addIt
返回的值。
在您的方法中,您将addSomething
(函数addIt)的返回值存储在名为all
的变量中。 all() == addSomething()()
function addSomething() {
var a = 2,b = 4;
function addIt() {
var total = a + b;
return total;
}
return addIt;
}
console.log(addSomething()());