Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保持不同的变量';循环中多个匿名异步函数的状态_Javascript_Jquery_Callback_Scope_Anonymous Function - Fatal编程技术网

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));
});