为什么这段代码在浏览器和node环境下运行的结果不一样?

代码:

var arr = [{
    flag: 0
}];
var timer = null;

function foo() {
    arr[0].flag += 0.125;
    console.log(arr);
    timer = setTimeout(foo, 500);
}
setTimeout(foo, 200);

node下的运行结果:

[ { flag: 0.125 } ]
[ { flag: 0.25 } ]
[ { flag: 0.375 } ]
[ { flag: 0.5 } ]
[ { flag: 0.625 } ]
[ { flag: 0.75 } ]
[ { flag: 0.875 } ]
[ { flag: 1 } ]

Chrome控制台上的运行结果:

[ { flag: 0.75 } ]
[ { flag: 0.75 } ]
[ { flag: 0.75 } ]
[ { flag: 0.75 } ]
//单次运行输出的数值总是不变,但是多次运行输出的数值是不一样的
阅读 4.1k
2 个回答

node控制台是转为字符串输出的,
chome中改为console.log(JSON.stringify(arr));再看看。

新手上路,请多包涵

// 这个在chrome 下和node 下运行结果不同是因为,node 是单线程的,事件队列中,只能一个一个按顺序执行
// chrome 下browser可以开启其他线程帮忙setTimeout 时间执行,线程之间是独立的,造成了不同步现象
// 具体的我也搞不清

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题