为什么设置超时's回调参数可以接受参数
why setTimeout's callback parameter can take parameters
在nodejs中,为什么我们可以将参数传递给setTimeout的回调函数
我知道,process.nextTick()
由于aspected而崩溃,因为它将一个未定义的值作为函数
但是,setTimeout()
究竟有什么神奇之处?
foo = function(a){
console.log(a);
}
setTimeout(foo('hello'), 0); // work fine
process.nextTick(foo('hello'), 0); // TypeError: undefined is not a function
使用:
setTimeout(foo('hello'), 0);
您正在执行foo
,并将结果(undefined
)传递给setTimeout
这意味着,在setTimeout(foo('hello'), 0);
运行的确切时刻,"hello"
将被记录,但不是因为超时已经结束。
这是您的代码,但有10秒的延迟。注意代码如何立即提醒"hello"
,而不是在10秒后:
foo = function(a){
alert(a);
}
setTimeout(foo('hello'), 10000);
设置超时时会立即调用foo('hello')
,而不是在指定的延迟之后
要将参数传递给超时函数,您需要将函数调用封装在一个函数中:
foo = function(a){
alert(a);
}
setTimeout(function(){
foo('hello');
}, 1000);
这样,foo
函数只有在超时结束后才会调用。
在process.nextTick(foo('hello'), 0);
上获得TypeError: undefined is not a function
的原因也是一样的。执行foo('hello')
,返回undefined
。该返回值被传递给process.nextTick
。您还应该将其封装在一个函数中:
process.nextTick(function(){
foo('hello');
}, 0);
setTimeout
没有崩溃的原因是它不介意undefined
作为函数参数:
setTimeout(undefined, 0)
你会看到它没有记录任何错误。
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- 用于回调的javascript参数
- 回调函数中传递参数的困难(Google Map API Markers)
- 如何正确地将参数传递给RequireJS回调函数
- 用javascript记录传递给回调的参数的约定是什么
- 将额外的参数传递给jquery.延迟回调
- Axios spread()具有未知数量的回调参数
- 在Javascript中向回调添加参数
- javascript,将参数传递给函数内部的闭包中的回调
- 如何从参数数组中调用回调
- 如何在回调函数中传递参数
- 如何使用传递参数回调 JavaScript 对象属性
- 了解匿名函数中的参数(回调示例)
- Nodejs expressJS 路由,参数回调未触发
- 如何获得访问变量/传递参数回调与d3
- Javascript第一个参数路径最后一个参数回调
- 参数/回调不匹配
- 按钮单击传递参数回调
- 在DistanceMatrixStatus中传递参数回调或设置变量值