Javascript变量在内联函数中的作用域
为什么这不能像预期的那样起作用:Javascript变量在内联函数中的作用域,javascript,variables,scope,inline-functions,Javascript,Variables,Scope,Inline Functions,为什么这不能像预期的那样起作用: $(函数(){ var数据=[[1],[3]]; var函数=[]; 对于(数据中的变量i){ var数据=数据[i]; functions.push(函数(){ $(“div”).append($(“”).text(“数据[0]=”+数据[0]+”,数据[“+i+”][0]=”+数据[i][0]); }); } for(函数中的变量i) 功能[i](); }); 这都是关于范围的。尝试改变 var data=datas[i]; functions.push(
$(函数(){
var数据=[[1],[3]];
var函数=[];
对于(数据中的变量i){
var数据=数据[i];
functions.push(函数(){
$(“div”).append($(“”).text(“数据[0]=”+数据[0]+”,数据[“+i+”][0]=”+数据[i][0]);
});
}
for(函数中的变量i)
功能[i]();
});代码>
这都是关于范围的。尝试改变
var data=datas[i];
functions.push(function(){
$("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
});
var数据=数据[i];
functions.push(函数(){
$(“div”).append($(“”).text(“数据[0]=”+数据[0]+”,数据[“+i+”][0]=”+数据[i][0]);
});
到
(功能(数据){
functions.push(函数(){
$(“div”).append($(“”).text(“数据[0]=”+数据[0]+”,数据[“+i+”][0]=”+数据[i][0]);
});
})(数据[i]);
数据
的for循环范围内值已更改。这就是为什么调用函数
时,它们使用上次修改的数据值
。
这就是为什么我们创建了一个新的范围,其中,data
和function
以友好的方式生活在一起。问题出在哪里?我希望数据[0]=1,数据[0][0]=1,我得到数据[0]=3,数据[0][0]=1为什么?很抱歉,这是我的错误。如果你有答案,把它作为答案发布,不要把它包括在你的问题中,请选择一个在重复标志中提到的带有.bind()的解决方案,以某种方式更干净,无论上述方法如何有效,无论如何,问题都将以重复的形式结束
(function (data) {
functions.push(function(){
$("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
});
})(datas[i]);