0
为什么按预期这不工作:的Javascript变中范围,内联函数
$(function(){
var datas=[[1],[3]];
var functions=[];
for(var i in datas){
\t var data=datas[i];
functions.push(function(){
\t $("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
});
}
for(var i in functions)
\t 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){
\t var data=datas[i];
functions.push(function(data){
\t $("div").append($("<p/>").text("data[0]="+data[0]+", datas["+i+"][0]="+datas[i][0]));
}.bind(null,data));
}
for(var i in functions)
\t functions[i]();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
有什么问题? –
我期望数据[0] = 1,数据[0] [0] = 1,我得到数据[0] = 3,数据[0] [0] = 1为什么? – pknoe3lh
[JavaScript闭合内循环 - 简单实用示例]可能的重复(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Hacketo