Closure仅在分配给新变量时才有效 - Javascript

时间:2018-05-22 13:37:55

标签: javascript closures

我已经开始学习闭包了,虽然我已经开始了解它们,但有一部分没有意义。

在下面的代码中,当我调用原始函数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());

1 个答案:

答案 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()());