最近我讀到這個performance guide Let's make the web faster,並被「避免陷阱與封閉」的建議困惑(如果這些建議是給變量範圍是動態的CommonLisp用戶):Javascript:爲什麼訪問閉包變量可能會很慢
var a = 'a'; function createFunctionWithClosure() { var b = 'b'; return function() { var c = 'c'; a; b; c; }; } var f = createFunctionWithClosure(); f();
當調用
f
,引用a
比引用b
,這是比參考c
慢慢。
這是相當明顯的是,引用局部變量Ç比b更快,但如果iterpreter編寫正確(不帶動態範圍界定 - 像鏈式散列表查找。)的轉速差應該只有邊緣。或不?
對於長壽(和我的好奇心),你能描述它在v5中的變化嗎? – Hogan 2012-02-12 14:02:14
因此,如果我會在var匿名函數中使用'var d = eval(「this」);'範圍鏈查找將抓取所有上下文以獲取'a'的引用?或者只是將'this'分配給'd'? – headacheCoder 2012-04-23 09:21:23
@ headacheCoder:如果代碼在某種「舊式」瀏覽器中運行,那麼這很有可能。但是,實際上你絕對不應該做這樣一個可怕的聲明:)尖端的瀏覽器甚至可以使用'eval'來優化事物,甚至可能依賴於'嚴格模式'。但是這些瀏覽器無論如何都要遵循ES5規範。 – jAndy 2012-04-23 09:27:38