这个奇怪的 setTimeout 语法是什么?
What is this strange setTimeout syntax?
我 运行 跨过如下代码(实际有效)并且很好奇语法发生了什么。
function timeout(a){
alert(a);
}
setTimeout('timeout(5)', 2000); //alerts 5 after two seconds
我看到了指向传递给 setTimeout 的函数的指针以及匿名函数。在带括号的引号中传递函数是否有效?我在 MDN 上找不到任何相关信息。
Is passing a function in quotes with parenthesis valid?
是的,您可以将带有任意代码的字符串传递给setTimeout
;它甚至不必是一个函数。这不是一个好主意。代码的计算就像在全局范围内一样。
现代的方法是:
setTimeout(timeout.bind(null, 5), 2000);
MDN 文档令人困惑。
每个人都会犯这个错误:对函数参数使用括号。
但即使在 MDN 语法上也很清楚:
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
所以,喜欢你的样本
window.setTimeout(timeout, 1000, 'hello');
function timeout(a){
echo a;
}
我 运行 跨过如下代码(实际有效)并且很好奇语法发生了什么。
function timeout(a){
alert(a);
}
setTimeout('timeout(5)', 2000); //alerts 5 after two seconds
我看到了指向传递给 setTimeout 的函数的指针以及匿名函数。在带括号的引号中传递函数是否有效?我在 MDN 上找不到任何相关信息。
Is passing a function in quotes with parenthesis valid?
是的,您可以将带有任意代码的字符串传递给setTimeout
;它甚至不必是一个函数。这不是一个好主意。代码的计算就像在全局范围内一样。
现代的方法是:
setTimeout(timeout.bind(null, 5), 2000);
MDN 文档令人困惑。
每个人都会犯这个错误:对函数参数使用括号。
但即使在 MDN 语法上也很清楚:
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
所以,喜欢你的样本
window.setTimeout(timeout, 1000, 'hello');
function timeout(a){
echo a;
}