在循环中调用函数时出现奇怪的javascript行为
strange javascript behaviour when calling function in a loop
我正在运行一个简单的测试,我得到了一个奇怪的行为,这是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()
是否异步?
好吧,你的代码片段太复杂了,试试这个:
var params = {id: 0};
console.log(params);
params.id = 1;
在Firefox中显示:
Object { id=0 }
但当我点击一个对象向下搜索时,它会显示id=1
。在Google Chrome中,它只显示Object
,但向下搜索时显示id=1
。
这种奇怪行为的原因是console
知道您正在记录一个对象(而不仅仅是一个字符串),每次查看控制台或刷新它时,它都会显示该对象的当前状态。
如果你发现这种行为容易出错并且违反直觉,这里有一些解决方法:
console.log(JSON.stringify(params));
console.log(params.id);
还要注意的是,这就是JavaScript调试器的工作方式,这不是JavaScript的错本身。
相关文章:
- 无法解释的JavaScript行为-错误
- 在循环中调用函数时出现奇怪的javascript行为
- 循环增量的JavaScript行为异常
- JavaScript行为不一致
- 在中使用for时的非直觉javascript行为
- 奇怪的javascript行为-JSON.parse:意外字符
- 令人困惑的javascript行为
- Chrome 和 Firefox 之间的 JavaScript 行为差异(鼠标悬停时的事件)
- 奇怪的JavaScript行为
- Firefox中“map”的奇怪JavaScript行为
- 设置局部变量时非常奇怪的JavaScript行为
- 不同机器上相同浏览器版本的JavaScript行为不一致
- 一个极其奇怪的Javascript行为:onLoad和$(document).ready()
- JavaScript行为和代码检查
- Javascript:从不同的方向覆盖默认的Javascript行为
- 奇怪的Javascript行为
- Javascript行为重用:这种方法会产生什么副作用
- 禁用Javascript行为
- 如何修复升级后ownCloud中损坏的JavaScript行为
- 空值的JavaScript行为是什么