不明白闭包功能是如何工作的?

时间:2016-09-29 19:12:43

标签: javascript

我正在阅读eloquentjavascript以学习javascript,但这个封闭的事情令我感到困惑。 warp1不是函数,但它看起来像函数,它看起来也像参数。闭包功能如何工作?我们可以使用它的原因是什么?

function wrapValue(n) {
  var localVariable = n;

  return function() { return localVariable; };
}

var wrap1 = wrapValue(1);
var wrap2 = wrapValue(2);

console.log(wrap1());
// → 1

console.log(wrap2());
// → 2

1 个答案:

答案 0 :(得分:0)

外部函数(wrapValue)返回一个函数。因此,返回的函数将分配给变量wrap1wrap2。这就是你可以从变量中调用返回函数的原因。

当我们查看以下内容时,可能会更容易理解。

您可以像以前一样创建一个函数:

function foo() { return "foo"; }

或者您可以为变量分配函数:

var foo = function() { return "foo"; }

第二个示例基本上与闭包完全相同 - 它为变量赋值。

在所有情况下,您都可以使用

调用该函数
foo();

通过变量或函数名称。