我看到這用了很多,我被告知把函數引用之間的報價不好,因爲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. Swift:class func ....爲什麼在類中創建方法時使用this而不是func?
- 2. 爲什麼swift協議使用func重載而不是使用不同名稱的func?
- 3. 什麼是func代表?
- 4. 爲什麼AJAX settimeout不起作用?
- 5. 爲什麼可以使用的setTimeout( 「1」)
- 6. setTimeout的語法是什麼?
- 7. 爲什麼settimeout塊eventloop
- 8. setTimeout爲什麼非高效
- 9. Firefox setTimeout(func,ms)發送默認參數給回調
- 10. 用行動而不是Func鍵
- 11. setTimeout(「otherFunction()」,2000)爲什麼是錯的?
- 12. setTimeout返回什麼?
- 13. 在Ilist中使用Func,爲什麼是lambda表達式?
- 14. 什麼是由setTimeout調用的函數?
- 15. 爲什麼人們在C++中使用`main()`而不是`int main()`?
- 16. 爲什麼人們使用i = i + 1而不是i ++?
- 17. 爲什麼setTimeout的是不是在JavaScript執行
- 18. 什麼是A B :: * func()定義?
- 19. functools.partial(func,myArgs)的等價類是什麼?
- 20. 這是什麼聲明`void func(bool b ...)`?
- 21. 爲什麼`a :: - > func;`有效?
- 22. 爲什麼將func <T>傳遞給構造函數而不是T?
- 23. def func(var)和def func =(var)有什麼區別?
- 24. 遞歸。 return func()和if(func())返回true有什麼區別?
- 25. 什麼是setTimeOut()的JavaScript等效於Android?
- 26. Angular的setTimeout的目的是什麼?
- 27. 爲什麼setTimeout只執行一次?
- 28. 爲什麼setTimeout代碼被阻止?
- 29. 爲什麼requestAnimationFrame比setInterval或setTimeout更好
- 30. func()不返回值時如何使用map(func,iterator)函數?
因爲人是愚蠢的。政治上更加正確,因爲使用流行並不意味着最佳實踐......根據其個人內在優點使用一段代碼,不是因爲它是「普通」或「酷」的東西。 – 2012-07-24 01:19:18