我试图让我的代码 JavaScript “严格”,所以我通过JSLint运行它以确保我的代码是合规的。
但是,在以下代码中:
setTimeout("getExtJs()", 2000);
我收到以下错误:
隐含的 eval 是邪恶的。传递一个函数而不是一个字符串。
如何使我的代码 JavaScript “严格”?
我试图让我的代码 JavaScript “严格”,所以我通过JSLint运行它以确保我的代码是合规的。
但是,在以下代码中:
setTimeout("getExtJs()", 2000);
我收到以下错误:
隐含的 eval 是邪恶的。传递一个函数而不是一个字符串。
如何使我的代码 JavaScript “严格”?
setTimeout(getExtJs, 2000);
请注意,getExtJs 周围没有引号,我传递的函数不是字符串。
编辑: 正如评论中所指出的,JSLint 不高兴的原因是,当第一个参数是 String 时,它被处理为代码,以与 eval() 相同的方式执行
见https://developer.mozilla.org/en/window.setTimeout
要找出为什么 eval() (以及在这里使用字符串作为第一个参数的扩展)是邪恶的,请参阅Mozilla 开发人员网络条目eval
。
如果您这样做,它不应该抱怨:
setTimeout(function(){
// your code of this function getExtJs here
}, 2000);
或者:
setTimeout(getExtJs, 2000);
尽管我认为您的实施在安全方面或其他方面没有任何问题。
正确的语法是
setTimeout(getExtJs, 2000);
您传递对该函数的引用,并在 2000 毫秒后执行该函数。如果你在函数名后面加上括号,你是在执行函数而不是引用它。
就像它说的那样,传入函数(函数名周围没有引号):
setTimeout(getExtJs, 2000);
当你传入一个字符串 ( "getExtJs"
) 时,setTimeout
结束eval
它。而不是这样,最好简单地传入函数本身(getExtJs
)。
setTimeout(function () {getExtJs();}, 2000);