我想将当前超时的ID传递给它正在执行的函数。
function test(timeout){
console.log(timeout)
}
setTimeout(test,1000,"timeout object") //how to pass a refrence to the current timeout object or id
编辑:
答案 0 :(得分:3)
我将创建一个实用程序函数,然后在需要时使用它。
@Velimir Tchatchevsky的答案也是最好的用法。包装方法必定会导致过度杀伤。
function setTimeoutWrapper(func, time) {
const ref = setTimeout(() => {
func(ref);
}, time);
}
setTimeoutWrapper((timeoutReference) => {
console.log('timeoutReference = ', timeoutReference);
}, 1000);
我也看不到将引用传递给函数的意义,因为如果您进入函数,则意味着它会被调用。因此,这里不需要clearTimeout
。
因为过度杀戮很有趣:
function setTimeoutWrapper(func, time, ...args) {
const ref = setTimeout(() => {
func(ref, ...args);
}, time);
}
setTimeoutWrapper((timeoutReference, p1, p2) => {
console.log('timeoutReference = ', timeoutReference);
console.log('p1 = ', p1);
console.log('p2 = ', p2);
}, 1000, 'I am a parameter', 'second param');
一些IIFE且没有全局变量怎么办?
(() => {
const ref = setTimeout(() => {
console.log('timeoutReference = ', ref);
}, 1000);
})();
console.log('Is there a global variable ?', ref);
具有外部功能
function func(ref) {
console.log('reference : ', ref);
}
(() => {
const ref = setTimeout(() => func(ref), 1000);
})();
console.log('Is there a global variable ?', ref);
答案 1 :(得分:2)
var myTimeout = setTimeout(test, 1000, "timeout object")
function test(timeout) {
console.log(myTimeout);
}
现在myTimeout
是对您超时的引用,您可以使用它用window.clearTimeout(myTimeout)
来取消超时或将其用于任何您想要的目的。
答案 2 :(得分:1)
您可以将超时参考存储在一个变量中,该变量将在传递的函数内部可用。
var timeoutReference = setTimeout(function(){
console.log('do something with the timeout reference');
console.log('timeoutReference = ',timeoutReference);
}, 1000);
答案 3 :(得分:1)
从技术上讲,setTimeout()
函数返回一个id,将其存储在变量中并传递给它。
function test(timeout) {
console.log(timeout2)
}
var timeout2 = setTimeout(test, 1000)
编辑: 根据所执行的环境,有时您不能在声明变量之前使用变量(即ES6类)。您必须要照顾好这一点。
答案 4 :(得分:1)
您可以通过处理this
所调用的test()
函数的setTimeout
上下文来实现此目的。您想使用对象属性而不是变量来传递超时引用,因为执行将异步发生。
function delay(){
var obj = {};
obj.timeout = setTimeout(test.bind(obj), 1000)
}
function test() {
console.log(this.timeout);
}
delay();
或者,您也可以将对象作为第三个参数传递给setTimeout
函数,如下所示:
function delay(){
var obj = {};
obj.timeout = setTimeout(test, 1000, obj)
}
function test(param) {
console.log(param.timeout);
}
delay();