试图解决这个问题时有点头疼.我想要做的是有一个带有参数自定义的setTimeout 与出不必创建一个函数来传递.让我用代码解释一下:
想避免:
function makeTimeout(serial){
serial.close();
}
setTimeout(makeTimeout(sp.name), 250);
Run Code Online (Sandbox Code Playgroud)
我想要做的就是以某种方式通过以下方式调用1个班轮:
setTimeout(function(arg1){ .... }(argument_value), 250);
Run Code Online (Sandbox Code Playgroud)
可以这样做,还是只能通过无参数函数?
Joã*_*lva 23
您可以传递一个匿名函数,makeTimeout该函数使用给定的参数进行调用:
setTimeout(function () {
makeTimeout(sp.name);
}, 250);
Run Code Online (Sandbox Code Playgroud)
还有另一种选择,使用bind:
setTimeout(makeTimeout.bind(this, sp.name), 250);
Run Code Online (Sandbox Code Playgroud)
但是,此功能是ECMAScript第5版功能,尚未在所有主流浏览器中支持.为了兼容性,您可以包含MDN提供bind的源代码,允许您在本机不支持它的浏览器中使用它.
演示.
如果不想声明单独的函数,可以使用立即调用的函数表达式和闭包,例如
// Parameter to use
var bar = 'bar';
// Function to call
function foo(arg) {
alert(arg);
}
// Go…
setTimeout(
(function(arg1){
return function(){
foo(arg1);
};
}(bar)), 2000);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用函数构造函数:
setTimeout( Function('foo(bar)'), 2000);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用字符串:
setTimeout('foo(bar)', 1000);
Run Code Online (Sandbox Code Playgroud)
这本质上是一样的。现在等待“但那就像使用 eval 一样,每个人都知道 eval 是邪恶的并且是一个巨大的安全漏洞——你所有的长子都注定要失败! ”
但严重的是,eval(和 Function 构造函数)效率低下,可能导致惰性编程,因此请使用另一个选项,例如上面的第一个。
| 归档时间: |
|
| 查看次数: |
33638 次 |
| 最近记录: |