我测试了这个codepen example:
我翻了三个超时时段中第一个的持续时间,如下面的代码片段所示,介于0,1和2之间,并注明了3个浏览器中的结果。
我发现了一个区别,并且发现我无法向自己解释为什么存在这种差异。
为什么chromes输出不同?
IE:
0. 1 2 3
1. 1 1 2
2. 1 1 2
火狐:
0. 1 2 3
1. 1 1 2
2. 1 1 2
铬:
0. 1 2 3
1. 1 2 3
2. 1 1 2
任何人都能解释一下吗?
以下是代码笔中的JS代码段
var obj = {
value: 1
}
function displayValueInInputOne(obj) {
document.getElementById('input_1').value = obj.value;
setTimeout(function(){
obj.value++;
}, 0); // <= switch this zero for a one and then a two...
}
function displayValueInInputTwo(obj) {
setTimeout(function(){
document.getElementById('input_2').value = obj.value;
obj.value++;
}, 0);
}
function displayValueInInputThree(obj) {
setTimeout(function(){
document.getElementById('input_3').value = obj.value;
}, 0);
}
(function(theObj){
displayValueInInputOne(theObj);
displayValueInInputTwo(theObj);
displayValueInInputThree(theObj);
})(obj)
答案 0 :(得分:1)
setTimeout不准确。话虽这么说,无论你设置什么,规格最小值是4ms。嵌入式超时可达10ms。您正在经历的重新排序可能是:
1)随便。
2)实施超时规范的差异结果。
.. a)Firefox做了大量预先计算的代码,IE做了类似的事情
.. b)Chrome更有可能遵循规范,他们的结果是我所期望的。