Почему это не работает, как ожидалось:Javascript variabes сферы в встроенных функций
$(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
прошло в рамках функции, но это будет все еще изменение последующий.
Therefor лучших решений 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, datas [0] [0] = 1 и я получаю данные [0] = 3, datas [0] [0] = 1 почему? – pknoe3lh
Возможный дубликат [JavaScript закрытия внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Hacketo