Javascript 为什么console.log在它之前记录一个值';谁被指派了?
举个简单的例子:Javascript 为什么console.log在它之前记录一个值';谁被指派了?,javascript,Javascript,举个简单的例子: 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);
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{dataload: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{dataload:false,etc..},1:etc..]
为什么变量在赋值之前会得到值
false
?因为console.log在每个实现中都不同步。这样它就一直排队,直到主线程完成。同时设置新值。是的,在某些情况下这有点烦人。那么如何调试?在.done()中我调用一个函数,在这个函数中我测试if(tab.dataLoaded){…}
,预期的结果是dataLoaded==true
,但测试是KO。您可以改为记录JSON.stringify(self.curTabs)
。下面是。使用调试器;-)或者使用一些let替换,比如stringify方法或以下方法之一:完全复制