一个简短的例子:
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
?
答案 0 :(得分:10)
因为console.log在每个实现中都不是同步的。这样它排队直到主线完成。在此期间,您的新值已设置。