我試圖讓我的代碼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