如何消除错误:“隐含的评估是邪恶的”

时间:2010-11-12 18:07:35

标签: javascript jslint

我正在尝试使我的代码JavaScript“严格”,因此我通过JSLint运行它以确保我的代码符合规定。

但是,在以下代码中:

setTimeout("getExtJs()", 2000);

我收到以下错误:

  

隐含的评估是邪恶的。传递函数而不是字符串。

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

5 个答案:

答案 0 :(得分:14)

setTimeout(getExtJs, 2000);

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

修改 正如评论中所指出的那样,JSLint被解除的原因是当第一个参数是一个String时,它被处理为代码,以与eval()

相同的方式执行。

请参阅https://developer.mozilla.org/en/window.setTimeout

要找出为什么eval()(以及使用Strings作为第一个参数的扩展名)是邪恶的,请参阅Mozilla Developer Network entry for eval

答案 1 :(得分:3)

如果你这样做,不应抱怨:

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

或者:

setTimeout(getExtJs, 2000);

虽然我在安全方面没有看到任何错误或其他方面的错误。

答案 2 :(得分:1)

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

setTimeout(getExtJs, 2000);

当您传入字符串("getExtJs")时,setTimeout最终会eval。而不是那样,最好简单地传入函数本身(getExtJs)。

答案 3 :(得分:1)

setTimeout(function () {getExtJs();}, 2000);

答案 4 :(得分:1)

正确的语法是

setTimeout(getExtJs, 2000);

您传递对该函数的引用,并在2000ms后执行该函数。如果将parens放在函数名后面,则表示您正在执行该函数而不是引用它。