jquery函数内的变量范围

时间:2012-10-14 09:41:18

标签: javascript jquery variables scope

meclass.prototype.switch = function() {
var items = [];
$.getJSON('http://localhost/jsoner.php', function(data) {
    $.each(data, function(key, val) { 
        items.push(val);
        alert(items[0]); //this works

    });
});
alert(items[0]); //this does not
}

我一直在修补这个问题,而不是真正得到它。我在我的所有jquery函数中都遇到了这个问题,所以它是基本的,我只是没有学习 - 而且没有运气找到答案。

1 个答案:

答案 0 :(得分:7)

getJSON方法是异步。执行将立即继续以下声明。只要服务器响应请求,回调函数将在稍后执行。

因此,任何依赖于异步请求结果的代码都需要在回调函数中移动。

这实际上是会发生的事情:

var items = []; //Declare `items`, empty array
//Make AJAX request
alert(items[0]); //It's still an empty array
//Wait some arbitrary amount of time...

//AJAX request complete, run the callback function
alert(items[0]); //Inside callback, items now contains elements