setTimeout 将自身作为参数传递
setTimeout pass itself as an argument
我想将当前超时的ID传递给它正在执行的函数。
function test(timeout){
console.log(timeout)
}
setTimeout(test,1000,"timeout object") //how to pass a refrence to the current timeout object or id
编辑:
- 超时可以是一个对象(ES6)或者一个数字,反正我想要一个引用
- 我不想将超时声明为全局变量,我只想将它作为参数传递
您可以将超时引用存储在一个变量中,该变量将在传递的函数内部可用。
var timeoutReference = setTimeout(function(){
console.log('do something with the timeout reference');
console.log('timeoutReference = ',timeoutReference);
}, 1000);
var myTimeout = setTimeout(test, 1000, "timeout object")
function test(timeout) {
console.log(myTimeout);
}
现在 myTimeout
是对您的超时的引用,您可以使用它通过 window.clearTimeout(myTimeout)
取消它或将其用于您想要的任何目的。
从技术上讲,setTimeout()
函数 returns 一个 id,将其存储在一个变量中并传递给它。
function test(timeout) {
console.log(timeout2)
}
var timeout2 = setTimeout(test, 1000)
编辑: 根据您执行它的环境,有时您不能在声明变量之前使用它(即 ES6 Class).你必须照顾好它。
我会创建一个效用函数,然后在需要时随时使用它。
@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);
您可以通过操纵 setTimeout
调用的 test()
函数的 this
上下文来实现此目的。您希望使用对象 属性 而不是变量来传递超时引用,因为执行将异步发生。
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();
我想将当前超时的ID传递给它正在执行的函数。
function test(timeout){
console.log(timeout)
}
setTimeout(test,1000,"timeout object") //how to pass a refrence to the current timeout object or id
编辑:
- 超时可以是一个对象(ES6)或者一个数字,反正我想要一个引用
- 我不想将超时声明为全局变量,我只想将它作为参数传递
您可以将超时引用存储在一个变量中,该变量将在传递的函数内部可用。
var timeoutReference = setTimeout(function(){
console.log('do something with the timeout reference');
console.log('timeoutReference = ',timeoutReference);
}, 1000);
var myTimeout = setTimeout(test, 1000, "timeout object")
function test(timeout) {
console.log(myTimeout);
}
现在 myTimeout
是对您的超时的引用,您可以使用它通过 window.clearTimeout(myTimeout)
取消它或将其用于您想要的任何目的。
从技术上讲,setTimeout()
函数 returns 一个 id,将其存储在一个变量中并传递给它。
function test(timeout) {
console.log(timeout2)
}
var timeout2 = setTimeout(test, 1000)
编辑: 根据您执行它的环境,有时您不能在声明变量之前使用它(即 ES6 Class).你必须照顾好它。
我会创建一个效用函数,然后在需要时随时使用它。
@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);
您可以通过操纵 setTimeout
调用的 test()
函数的 this
上下文来实现此目的。您希望使用对象 属性 而不是变量来传递超时引用,因为执行将异步发生。
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();