我正在尝试使我的代码JavaScript“严格”,因此我通过JSLint运行它以确保我的代码符合规定。
但是,在以下代码中:
setTimeout("getExtJs()", 2000);
我收到以下错误:
隐含的评估是邪恶的。传递函数而不是字符串。
如何让我的代码JavaScript“严格”?
答案 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放在函数名后面,则表示您正在执行该函数而不是引用它。