我试图让我的代码JavaScript“严格”,所以我通过运行它JSLint确保我的代码是兼容的。JavaScript:如何消除此错误?
然而,在下面的代码:
setTimeout("getExtJs()", 2000);
我收到以下错误:
Implied eval is evil. Pass a function instead of a string.
如何让我的代码JavaScript的 “严”?
我试图让我的代码JavaScript“严格”,所以我通过运行它JSLint确保我的代码是兼容的。JavaScript:如何消除此错误?
然而,在下面的代码:
setTimeout("getExtJs()", 2000);
我收到以下错误:
Implied eval is evil. Pass a function instead of a string.
如何让我的代码JavaScript的 “严”?
如果你这样做不应该抱怨:
setTimeout(function(){
// your code of this function getExtJs here
}, 2000);
或者:
setTimeout(getExtJs, 2000);
虽然我看不出有什么错在你实现安全,明智或以其他方式。
setTimeout(getExtJs, 2000);
请注意,getExtJs周围没有引号,我传递的函数不是String。
编辑: 作为评价为什么JSLint的是不高兴的原因是注意,当第一个参数是作为代码以相同的方式,与eval()
见执行其处理的字符串https://developer.mozilla.org/en/window.setTimeout
要了解为什么eval()(以及使用字符串作为第一个参数的扩展名)是邪恶的,请参阅Mozilla Developer Network entry for eval
。
+1。但为了绝对完整,您可能想要添加如何将字符串作为第一个参数进行评估,而将表达式作为第一个参数进行评估。 – Gopherkhan 2010-11-12 19:32:47
像它说,在传递函数(周围的函数名称不包括引号):
setTimeout(getExtJs, 2000);
当您在一个字符串("getExtJs"
)传球,setTimeout
结束了eval
荷兰国际集团它。取而代之的是,最好简单地传递函数本身(getExtJs
)。
setTimeout(function() {getExtJs();}, 2000);
正确的语法是
setTimeout(getExtJs, 2000);
你传递给函数的引用,2000毫秒后执行的功能。如果你在函数名后面加上parens,那么你正在执行函数而不是引用它。
请标记为已接受的答案。 (点击旁边的小复选标记)。 – Adam 2012-09-06 23:34:40