3

一个简短的例子:

self.curTabs = null;

$j.getJSON(url)
    .done(function (response) {
        self.curTabs = response.tabs;

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = true;
        });

        console.log(self.curTabs);
    });

逻辑输出:[ 0: Object { dataLoaded: true, etc... }, 1: etc... ].

但是有了这个例子:

self.curTabs = null;

$j.getJSON(url)
    .done(function (response) {
        self.curTabs = response.tabs;

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = true;
        });

        console.log(self.curTabs);

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = false;
        });
    });

不合逻辑的输出:[ 0: Object { dataLoaded: false, etc... }, 1: etc... ]

为什么变量false在我分配它之前得到值?

4

1 回答 1

10

因为 console.log 在每个实现中都不是同步的。这样它就会排队直到主线程完成。与此同时,您的新值已设置。

于 2013-09-19T15:40:32.937 回答