4

我试图让我的代码 JavaScript “严格”,所以我通过JSLint运行它以确保我的代码是合规的。

但是,在以下代码中:

setTimeout("getExtJs()", 2000);

我收到以下错误:

隐含的 eval 是邪恶的。传递一个函数而不是一个字符串。

如何使我的代码 JavaScript “严格”?

4

5 回答 5

14
setTimeout(getExtJs, 2000);

请注意,getExtJs 周围没有引号,我传递的函数不是字符串。

编辑: 正如评论中所指出的,JSLint 不高兴的原因是,当第一个参数是 String 时,它被处理为代码,以与 eval() 相同的方式执行

https://developer.mozilla.org/en/window.setTimeout

要找出为什么 eval() (以及在这里使用字符串作为第一个参数的扩展)是邪恶的,请参阅Mozilla 开发人员网络条目eval

于 2010-11-12T18:09:34.440 回答
3

如果您这样做,它不应该抱怨:

setTimeout(function(){
  // your code of this function getExtJs here
}, 2000);

或者:

setTimeout(getExtJs, 2000);

尽管我认为您的实施在安全方面或其他方面没有任何问题。

于 2010-11-12T18:09:30.317 回答
1

正确的语法是

setTimeout(getExtJs, 2000);

您传递对该函数的引用,并在 2000 毫秒后执行该函数。如果你在函数名后面加上括号,你是在执行函数而不是引用它。

于 2010-11-12T18:13:27.113 回答
1

就像它说的那样,传入函数(函数名周围没有引号):

setTimeout(getExtJs, 2000);

当你传入一个字符串 ( "getExtJs") 时,setTimeout结束eval它。而不是这样,最好简单地传入函数本身(getExtJs)。

于 2010-11-12T18:09:40.157 回答
1
setTimeout(function () {getExtJs();}, 2000);
于 2010-11-12T18:09:45.173 回答