我遇到了类似下面的代码(实际上是有效的),我很好奇语法会发生什么。
function timeout(a){
alert(a);
}
setTimeout('timeout(5)', 2000); //alerts 5 after two seconds
我已经看到了传递给setTimeout和匿名函数的函数的指针。用括号中的函数引用函数是否有效?我在MDN上找不到任何关于它的信息。
答案 0 :(得分:2)
是否在带括号的引号中传递函数?
是的,你可以将带有任意代码的字符串传递给setTimeout
;它甚至不一定是一个功能。这不是一个好主意。代码被评估为好像它在全球范围内。
现代的做法是:
setTimeout(timeout.bind(null, 5), 2000);
答案 1 :(得分:0)
MDN文档令人困惑。
每个人都犯了这个错误:在函数参数中使用括号。
但即使是MDN语法也很明确:
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
所以,就像你的样本
window.setTimeout(timeout, 1000, 'hello');
function timeout(a){
echo a;
}