【发布时间】:2015-11-03 09:42:30
【问题描述】:
为什么这不能按预期工作:
$(function(){
var datas=[[1],[3]];
var functions=[];
for(var i in datas ){
var data=datas[i];
functions.push(function(){
$("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
});
}
for(var i in functions )
functions[i]();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div />
我希望:
data[0]=1, datas[0][0]=1
data[0]=3, datas[1][0]=3
谁能帮我理解这里发生了什么?
非常感谢, 问候帕特里克
---------解决方案------
var data 已在函数范围内,但之后仍会更改。
因此最好的解决方案是bind():
$(function(){
var datas=[[1],[3]];
var functions=[];
for(var i in datas ){
var data=datas[i];
functions.push(function(data){
$("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
}.bind(null,data));
}
for(var i in functions )
functions[i]();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
【问题讨论】:
-
有什么问题?
-
我希望 data[0]=1, datas[0][0]=1 而我得到 data[0]=3, datas[0][0]=1 为什么?
-
对不起是我的错
-
如果您有答案,请将其作为答案发布,请不要将其包含在您的问题中
标签: javascript variables scope inline-functions