javascript - 为什么在版本 B 中运行 f[1]() 与在下面的版本 A 中不同?

标签 javascript html

为什么在版本 B 中运行 f1 与在下面的版本 A 中不同?
//版本 A

var f = {};
for( var i=0 ; i<3 ; i++ ) {
f[i] = function() { alert(i); }
}

//版本B

var f = {};
for( var i=0 ; i<3 ; i++ ) {
f[i] = function(j) { return function() { alert(j); }; }(i);
}

最佳答案

第一个代码片段生成了 3 个绑定(bind)到 i 的函数。

第二个代码片段生成了 3 个围绕 i 的值关闭的函数 - 一个闭包

这意味着在第一个示例中,如果您这样做:

i = "hi";
f[0](); // "hi"

次要的:

f 可能应该初始化为 f = [] 因为您将它用作数组。

关于javascript - 为什么在版本 B 中运行 f[1]() 与在下面的版本 A 中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056508/

相关文章:

JavaScript 在鼠标单击时绘制一个圆圈 - 坐标不匹配

javascript - 隐藏除第一个子级之外的所有子级 div。当我从第一个 div 选择一个单选选项时,显示第二个

javascript - 如果输入特殊文本,则删除文本区域中的值

javascript - 在不加载图像的情况下获取图像 src?

html - 在图像附近垂直居中文本

javascript - "display: none"div 中的图像未加载 onpageload

asp.net - ASP 用户控件中的 JavaScript 函数定义

javascript - .live 不能在 Google Chrome 中使用 jQuery,但可以在 IE 中使用

html - Angular ui 网格 : how to apply filter on group-headers?

javascript - 如何为以下场景的每个选择框分配唯一 ID