我正在做一些Java闭包的实验,尤其是AngularJS指令(1.x)。
简单地说,我想知道为什么 ScenarioOne 正确捕获了我们想要的变量message
,而 ScenarioTwo 却没有。为什么IIFE在调用自身时不能捕获并保持所需的message
值?
情景1
// WORKS. Displays 'We want this message'
var message = 'We want this message';
element.bind('click', (function(){
var msg = message; // <-- MAGIC ?
return function(){
element.append('<p>Value of message: ' + msg + '</p>');
};
})());
message = 'We DON\'T want this message';
场景2
// DOES NOT WORK. Displays 'We DON'T want this message'
var message = 'We want this message';
element.bind('click', (function(){
return function(){
element.append('<p>Value of message: ' + message + '</p>');
};
})());
message = 'We DON\'T want this message';
我想了解,该任务的魔术机制是什么(请参见 <-MAGIC 所示的行)?关于此的一般规则是什么?您是否需要将外部作用域中的所有变量都显式分配给IIFE中的新变量?
这是所有这些的有效Plunkr:https://plnkr.co/edit/1M9yrzuOi0bzNHxbb5rO