Javascript 保持不同的变量';循环中多个匿名异步函数的状态
我不知道如何在没有代码的情况下描述这一点,所以这里是:Javascript 保持不同的变量';循环中多个匿名异步函数的状态,javascript,jquery,callback,scope,anonymous-function,Javascript,Jquery,Callback,Scope,Anonymous Function,我不知道如何在没有代码的情况下描述这一点,所以这里是: $('.colors').each(function() { $.getJSON('my.json', function(data) { $(this).css('color', data.color); }); }); 我希望getJSON回调的主体引用父(eachcallback)范围中this的值 此代码将不起作用,因为此将与getJSON回调之外的代码不同。即使我尝试将它放在一个变量中,它也不会起作
$('.colors').each(function() {
$.getJSON('my.json', function(data) {
$(this).css('color', data.color);
});
});
我希望getJSON
回调的主体引用父(each
callback)范围中this
的值
此代码将不起作用,因为此
将与getJSON
回调之外的代码不同。即使我尝试将它放在一个变量中,它也不会起作用,因为所有回调只共享一个变量,而不是循环每次迭代共享一个变量
我如何才能做到这一点?您可以在一个闭包中捕获它:
$('.colors').each(function() {
var $this = $(this);
$.getJSON('my.json', function(data) {
$this.css('color', data.color);
});
});
或:
您可以在闭包中捕获它:
$('.colors').each(function() {
var $this = $(this);
$.getJSON('my.json', function(data) {
$this.css('color', data.color);
});
});
或:
看看
看看
我想试试这个,但是Yoshi的答案使用了jQuery,它非常完美+不管怎样,我想试试这个,但是Yoshi的答案使用了jQuery,非常完美+1无论如何。
$('.colors').each(function() {
$.getJSON('my.json', $.proxy(function(data) {
$(this).css('color', data.color);
}, this));
});