0

所以如果我有一些像这样的javascript:

Foo.init = function(options) {
  Bar.set_listener('some_event', function() {
    console.log(options);
  });
};

我使用 Foo.init({whatever: 'hi'}) 之类的选项调用 Foo.init,并且 Bar.set_listener 方法获取回调并存储它,然后在稍后触发 'some_event' 时调用它。 ...

console.log 会打印 undefined 或 {whatever: 'hi'} 吗?答案似乎是 {whatever: 'hi'} 但这让我很困惑。这个回调在调用时如何知道如何引用传递给 Foo.init 的选项变量?

4

1 回答 1

2

内部函数引用外部函数中定义的状态的能力称为闭包。这是大多数允许 lambda 或函数值的语言中存在的功能。

它是如何实现的,值得写一篇比 Stack Overflow 回答中真正能说的长得多的帖子。但总而言之,只要存在引用它们的内部函数,Javascript 运行时就会持久保存外部函数中定义的值。

于 2013-03-05T23:17:29.153 回答