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