什么是这个奇怪的setTimeout语法?

时间:2015-02-05 16:44:43

标签: javascript function settimeout

我遇到了类似下面的代码(实际上是有效的),我很好奇语法会发生什么。

function timeout(a){
  alert(a);
}

setTimeout('timeout(5)', 2000); //alerts 5 after two seconds

我已经看到了传递给setTimeout和匿名函数的函数的指针。用括号中的函数引用函数是否有效?我在MDN上找不到任何关于它的信息。

2 个答案:

答案 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;
}