javascript 控制台陷阱?控制台中 setTimeout 返回的那些值是什么?
javascript console gotchas ? what are those values returned by setTimeout in console?
当运行控制台中出现以下代码
var ajout1 = function(number) {
number = number || 100;
console.log(number + 1);
}
setTimeout(ajout1, 1000);
setTimeout(ajout1(500), 2000); // evaluates immediately and returns nothing but this is "by design" to show how NOT to write your timeout
setTimeout(function() {
ajout1(1000)
}, 3000);
可能会出现以下结果
t+1: 101
t+2: 501
t+3: 1001
如果你仔细观察,你会发现 t2 将被立即评估,因此不会等待 2 秒才返回。 (这是"by design"。它教(我)如何不写超时)。所以预期的输出变成:
t+0: 501
t+1: 101
t+3: 1001
其实我真正得到的是
t+0: 501
t+0: <X
t+1: 101
t+3: 1001
随着 X 的价值不断增长。
我认为 X 是 timerid,所以我将代码重写为
var t1=setTimeout(ajout1,1000);
var t2=setTimeout(ajout1(500),2000);// no good
var t3=setTimeout(function(){ajout1(1000)},3000);
现在输出是
t+0: 501
t+0: <undefined
t+1: 101
t+3: 1001
如果我计算 t1、t2、t3,它们的值为 X+1、X+2、X+3。所以我猜我打赌 X 是计时器 ID 是正确的。
我的问题是为什么控制台只输出 1 个计数器 id 而不是三个的值?为什么我得到 "undefined" 返回值。
我在 Chrome 和 Edge 控制台中测试了相同的结果
你的第二个 setTimeout()
发生了什么?
setTimeout(ajout1(500)/*evaluates immediately and returns nothing*/,2000);
然后,该代码如下所示:
setTimeout(undefined,2000); //undefined, because ajout1(500) didn't return anything
然后
setTimeout("undefined",2000); //Coerced to string
...2 秒后...
eval("undefined") //Altough not really eval, but similar to it.
当运行控制台中出现以下代码
var ajout1 = function(number) {
number = number || 100;
console.log(number + 1);
}
setTimeout(ajout1, 1000);
setTimeout(ajout1(500), 2000); // evaluates immediately and returns nothing but this is "by design" to show how NOT to write your timeout
setTimeout(function() {
ajout1(1000)
}, 3000);
可能会出现以下结果
t+1: 101
t+2: 501
t+3: 1001
如果你仔细观察,你会发现 t2 将被立即评估,因此不会等待 2 秒才返回。 (这是"by design"。它教(我)如何不写超时)。所以预期的输出变成:
t+0: 501
t+1: 101
t+3: 1001
其实我真正得到的是
t+0: 501
t+0: <X
t+1: 101
t+3: 1001
随着 X 的价值不断增长。 我认为 X 是 timerid,所以我将代码重写为
var t1=setTimeout(ajout1,1000);
var t2=setTimeout(ajout1(500),2000);// no good
var t3=setTimeout(function(){ajout1(1000)},3000);
现在输出是
t+0: 501
t+0: <undefined
t+1: 101
t+3: 1001
如果我计算 t1、t2、t3,它们的值为 X+1、X+2、X+3。所以我猜我打赌 X 是计时器 ID 是正确的。 我的问题是为什么控制台只输出 1 个计数器 id 而不是三个的值?为什么我得到 "undefined" 返回值。
我在 Chrome 和 Edge 控制台中测试了相同的结果
你的第二个 setTimeout()
发生了什么?
setTimeout(ajout1(500)/*evaluates immediately and returns nothing*/,2000);
然后,该代码如下所示:
setTimeout(undefined,2000); //undefined, because ajout1(500) didn't return anything
然后
setTimeout("undefined",2000); //Coerced to string
...2 秒后...
eval("undefined") //Altough not really eval, but similar to it.