javascript - 为什么 IIFE 不捕获其范围内的变量?
问题描述
我正在对 Javascript 中的闭包进行一些试验,尤其是使用 AngularJS 指令(1.x)。
简单地说,我想知道为什么ScenarioOne正确捕获了message
我们想要的变量,而ScenarioTwo没有。为什么 IIFE 在调用自身时不能捕获并保持所需的值message
?
情景一
// 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';
情景二
// 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
解决方案
推荐阅读
- php - JSON 成功未触发
- react-native - React Native - React 导航抽屉错误
- c# - 如果我离开页面并返回,模型返回 null
- javascript - 无法设置未定义的 Typescript 类的属性“名称”
- r - 是否有用于为现有数据框创建新列并将“03”分配给前 68 行并将“04”分配给接下来的 68 行的 R 函数?
- java - 我无法通过我的代码单击 Button 元素,有人可以在这里帮忙吗
- python - 无法通过具有指定 device_id 的 pylibftdi 与 FTDI 设备通信
- php - 为什么只显示此查询中的一行?
- regex - 使用 Google Analytics 正则表达式仅返回字符串中的数字
- c++ - 循环通过 const char 时 Cout 给出垃圾输出