我看到這用了很多,我被告知把函數引用之間的報價不好,因爲setTimeout
/setInterval
evals
參考。這兩者之間的實際區別是什麼,一個用在另一個之上,爲什麼我會這麼頻繁地使用它,即使這種方式不好應該是常識?爲什麼人們使用setTimeout(「func()」,...)而不是setTimeout(func,...)
4
A
回答
3
人們可能沒有意識到他們可以使用不加引號的形式。
字符串中引用的名稱可能尚未定義。
引述的形式爲您提供了延遲執行:
setTimeout("myFunction(1, 'hello')", 100)
比更容易理解:
setTimeout(function() { myFunction(1, 'hello') }, 100)
,這沒有做筆者想要的東西:
setTimeout(myFunction(1, 'hello'), 100)
0
我敢打賭,它也可以防止m埃默裏泄漏。
不泄漏X:
var x = $("loading");
setTimeout("createTree(1);", 0);
泄漏的X:
var x = $("loading");
setTimeout(function(){createTree(1);}, 0);
1
有這兩種形式之間的兩個主要區別:
setTimeout("myFunc()", 100);
和
setTimeout(myFunc, 100);
第一個效率較低,它在全局範圍內評估函數,因此您不能將它傳遞給本地函數或任何非全局函數。
在看效率的說法,如果你想叫你在你的代碼了,你會寫一個函數:
x = myFunc();
或者你可以這樣寫:
x = eval("myFunc()");
當然,你會寫第一個因爲:
- 這就是你通常寫的javascript
- 函數引用可以在解釋器的第一遍中解析一次,而不是在每次執行時解析一次
- 解析器/優化器可以使用第一次而不是第二次重命名符號。
- 可以調用本地函數與第一個,但第二個需要一個全球性的功能
eval()
只有在沒有其他更好的辦法做到這一點,應使用一個相當重量級的東西。
僅供參考,this jsPerf comparison表示eval()
版本慢96%。在某些情況下,表現可能並不重要,但你可以明白它的效率。
相關問題
- 1. `setTimeout(func,0)`和`setTimeout(func,1)`是否一樣?
- 2. Swift:class func ....爲什麼在類中創建方法時使用this而不是func?
- 3. 爲什麼func()和func(void)不同
- 4. 使用jQuery.queue,而不是setTimeout
- 5. 什麼時候我需要使用std :: async(std :: launch :: async,func())而不是func()?
- 6. 爲什麼swift協議使用func重載而不是使用不同名稱的func?
- 7. [sock] = func()是什麼意思?
- 8. 什麼是func代表?
- 9. 爲什麼AJAX settimeout不起作用?
- 10. 爲什麼可以使用的setTimeout( 「1」)
- 11. 爲什麼在推遲使用setTimeout
- 12. setTimeout的語法是什麼?
- 13. 爲什麼在'bsTransitionend'中'setTimeout'?
- 14. setTimeout爲什麼非高效
- 15. 爲什麼settimeout塊eventloop
- 16. 用行動而不是Func鍵
- 17. Firefox setTimeout(func,ms)發送默認參數給回調
- 18. setTimeout(「otherFunction()」,2000)爲什麼是錯的?
- 19. 爲什麼Queryable.SelectMany(...)重載接受Func <S,IEnumerable <R>>而不是Func <S,IQueryable <R>>?
- 20. 爲什麼setTimeout不按預期工作?
- 21. setTimeout返回什麼?
- 22. 在Ilist中使用Func,爲什麼是lambda表達式?
- 23. 什麼是由setTimeout調用的函數?
- 24. 的setTimeout不是爲循環
- 25. 爲什麼'Func <IBase>'編譯'Func <TGeneric>其中TGeneric:IBase'不?
- 26. 爲什麼我不能在func中使用自我Swift
- 27. 爲什麼人們使用i = i + 1而不是i ++?
- 28. 爲什麼人們在C++中使用`main()`而不是`int main()`?
- 29. 爲什麼人們使用Type * var而不是Type * var?
- 30. 這是什麼聲明`void func(bool b ...)`?
因爲人是愚蠢的。政治上更加正確,因爲使用流行並不意味着最佳實踐......根據其個人內在優點使用一段代碼,不是因爲它是「普通」或「酷」的東西。 – 2012-07-24 01:19:18