为什么IIFE无法在其范围内捕获变量?

时间:2018-09-17 15:08:24

标签: javascript angularjs-directive closures variable-assignment iife

我正在做一些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

0 个答案:

没有答案