我正在尝试使我的代码JavaScript“严格”,所以我通过JSLint运行它以确保我的代码符合要求。
但是,在以下代码中:
setTimeout("getExtJs()", 2000);
我收到以下错误:
暗示的eval是邪恶的。传递函数而不是字符串。
如何使我的代码JavaScript“严格”?
setTimeout(getExtJs, 2000);
请注意,getExtJs周围没有引号,我传递的函数不是String。
编辑:如评论中所述,JSLint被解除的原因是当第一个参数是一个String时,它被处理为代码,以与eval()相同的方式执行
见https://developer.mozilla.org/en/window.setTimeout
要找出为什么eval()(以及通过使用Strings作为第一个参数的扩展)是邪恶的,请参阅Mozilla Developer Network entry for eval
。
如果你这样做,它不应该抱怨:
setTimeout(function(){
// your code of this function getExtJs here
}, 2000);
要么:
setTimeout(getExtJs, 2000);
虽然我没有在安全方面或其他方面看到任何错误。
就像它说的那样,传递函数(函数名称周围没有引号):
setTimeout(getExtJs, 2000);
当你传入一个字符串("getExtJs"
)时,setTimeout
结束了eval
ing它。而不是那样,最好简单地传入函数本身(getExtJs
)。
setTimeout(function () {getExtJs();}, 2000);
正确的语法是
setTimeout(getExtJs, 2000);
您传递对该函数的引用,并在2000ms后执行该函数。如果将parens放在函数名后面,则表示您正在执行该函数而不是引用它。