我只是在摆弄一些小提琴。这样一个适当的服务名称。
我常常在摆弄时使用firebug-lite-debug.js
作为外部资源。以下代码是此问题的主题。
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var hello, removed;
console.log(numbers);
removed = numbers.slice(2, 5); // 3, 4, 5
console.log(numbers);
console.log(removed);
hello = numbers.splice(4, 2, 200, 200);
console.log(numbers);
console.log(hello);
输出如下。
[1, 2, 3, 4, 200, 200, 7, 8, 9, 10]
[1, 2, 3, 4, 200, 200, 7, 8, 9, 10]
[3, 4, 5]
[1, 2, 3, 4, 200, 200, 7, 8, 9, 10]
[5, 6]
然而,在我看来,因为splice()
仅在前几个console.log()
语句之后被调用,所以不应该在任何地方出现200,而是第4行。
我要么疯了,要么console.log()是异步的。这里发生了什么?
更新: Firebug's console.log: debugging asynchronous variables提到console.log()
确实是异步的。这是设计的吗?如果是的话,为什么会这样呢?如果它返回的是对同一个Array实例的引用,它是否会破坏基于步骤的调试的目的?