且看jquery的第一行和最后一行代碼
(function(window, undefined) {})(window);
這種匿名結構我們屢見不鮮,今天要說的不是這個,而是第二個參數,jquery並沒有給他傳值,為什么?我們知道,沒有傳值的形參會被默認設置為window.undefined,那為什么jquery開發者沒有使用window.undefined本身,而是使用一個形參替代呢?
想了一下,至少有兩點值得這樣做(歡迎補充):
- undefined被設置為了局部變量,局部變量意味着直接在當前作用域中即可得到使用,不用再查找上級作用域鏈,減少搜索次數提高效率。
- 且看壓縮后的代碼,(function(a,b){})(window),undefined被很巧妙的替換成的b,而在后續的代碼中,很多判斷都用到了undefined,而此時用b就行了,代碼量減少很可觀。局部變量在壓縮的時候會被簡短字符替換,這樣可以有效的減少壓縮后的文件大小,所以很多局部變量被拉出來設置,不只是為了暫存結果,也有利於壓縮。
jquery代碼有很多精巧有意思的地方,值得學習,都是使用語言本事,思想多重要。
