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

Javascript 为什么在版本B中运行f[1]()与下面的版本A中运行f[1]()不同?,javascript,html,Javascript,Html,为什么在下面的版本B中运行f1与在版本A中运行f1不同? //版本A var f = {}; for( var i=0 ; i<3 ; i++ ) { f[i] = function() { alert(i); } } var f={}; 对于(var i=0;i,第一个代码段生成3个绑定到i的函数 第二个代码段生成了3个函数,这些函数围绕i-aclosure的值关闭 这意味着在第一个示例中,如果您: i = "hi"; f[0](); // "hi" 小调: f可能应该初始化为f=[

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

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

对于(var i=0;i,第一个代码段生成3个绑定到
i
的函数

第二个代码段生成了3个函数,这些函数围绕
i
-aclosure的值关闭

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

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


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

第一个代码段生成3个绑定到
i
的函数

第二个代码段生成了3个函数,这些函数围绕
i
-aclosure的值关闭

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

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


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

这是因为一个称为闭包的概念,其中返回函数的函数的参数值保留在返回的函数中

这是因为一个称为闭包的概念,其中函数的参数值n返回的函数保留在返回的函数中