我正在运行一个简单的测试,我得到一个奇怪的行为,这里是js代码:
var handler = function(index,params){
params.id = index;
}
function test(){
var params = {'id':0};
console.log(params);
gradualRepetitionCalls(0,10,params);
}
function gradualRepetitionCalls(index, maxIndex,params)
{
if (index < maxIndex)
{
handler(index,params);
index++;
gradualRepetitionCalls(index,maxIndex,params);
}
}
test();
奇怪的是,console.log(params)
显示id为'9',而我希望它为'0'。 console.log()
是否异步?
答案 0 :(得分:3)
好吧,你的代码片段过于复杂,试试这个:
var params = {id: 0};
console.log(params);
params.id = 1;
在Firefox中显示:
Object { id=0 }
但是当我点击要向下钻取的对象时,它会显示id=1
。在谷歌浏览器中,它只显示Object
,但在向下钻取时显示id=1
。
这种奇怪行为的原因是console
了解您正在记录对象(而不仅仅是字符串),每次查看控制台或刷新它时,它都会显示该对象的当前状态。
如果您发现此行为容易出错且反直觉,请参阅以下解决方法:
console.log(JSON.stringify(params));
console.log(params.id);
另请注意,这是JavaScript调试器的工作方式,而不是JavaScript的错误本身。
答案 1 :(得分:2)
不,console.log是同步的。但是,您只创建一个对象并将此对象“输出”到控制台 - 之后,您将更改此对象的属性(对象通过引用传递!)。控制台只显示此对象的最近状态,而不是记录时的快照。