2013-03-05 44 views
0

所以,如果我有一些JavaScript这样的:javascript如何在回调中引用变量?

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

,我叫Foo.init与像Foo.init一些选项({什么:“嗨”})和Bar.set_listener方法需要回调和商店它,然后调用它,在'some_event'被触发时...

将console.log打印undefined或{whatever:'hi'}?答案似乎是{无论:'嗨'}但让我困惑。如何调用这个回调有什么想法如何引用传递给Foo.init的options变量?

+0

您需要阅读Javascript中的'闭包'。这里的解释太长而无法成为答案。 – bmargulies 2013-03-05 23:14:50

+0

http://en.wikipedia.org/wiki/Closure_%28computer_science%29 – 2013-03-05 23:15:14

+0

它记录'{whatever:'hi'}'。如何,这是一个实现细节。 – 2013-03-05 23:16:57

回答

2

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

它如何实现是值得的一个帖子比真正可以说在一个堆栈溢出答案。但是总而言之,只要存在一个引用它们的内部函数,Javascript运行时将持久保存在外部函数中定义的值。