这个奇怪的setTimeout语法是什么

What is this strange setTimeout syntax?

本文关键字:setTimeout 语法 是什么      更新时间:2023-09-26

我遇到了如下代码(实际上有效),我很好奇语法发生了什么。

function timeout(a){
  alert(a);
}
setTimeout('timeout(5)', 2000); //alerts 5 after two seconds

我看到了指向传递给setTimeout的函数以及匿名函数的指针。用带括号的引号传递函数有效吗?我在MDN上找不到任何关于它的信息。

用带括号的引号传递函数有效吗?

是的,您可以将带有任意代码的字符串传递到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;
}