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

问题描述 投票:4回答:5

我正在尝试使我的代码JavaScript“严格”,所以我通过JSLint运行它以确保我的代码符合要求。

但是,在以下代码中:

setTimeout("getExtJs()", 2000);

我收到以下错误:

暗示的eval是邪恶的。传递函数而不是字符串。

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

javascript jslint
5个回答
14
投票
setTimeout(getExtJs, 2000);

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

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

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

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


3
投票

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

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

要么:

setTimeout(getExtJs, 2000);

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


1
投票

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

setTimeout(getExtJs, 2000);

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


1
投票
setTimeout(function () {getExtJs();}, 2000);

1
投票

正确的语法是

setTimeout(getExtJs, 2000);

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

© www.soinside.com 2019 - 2024. All rights reserved.