(function(window,undefined){...})(window);javascript
這是一個典型的自執行的匿名函數。java
爲何會有一個名爲undefined的形參呢?函數
undefined不是常量,能夠把它設置爲其餘值。spa
undefined表示一個未聲明的變量,或已聲明但沒有賦值的變量,或一個並不存在的對象屬性。code
JavaScript中,undefined並非做爲JavaScript的保留關鍵字,咱們能夠執行var undefined = '123'對undefined賦值。對象
因此若是先執行var undefined = '123';再去執行(function(window){...//code goes there})(window),會形成中間代碼被污染。blog
可是jQuery的(function(window,undefined){...})(window)用法,很好的避免了這個問題。ip
執行匿名函數的時候,只傳遞一個參數window,而不傳遞undefined,那麼函數體重的undefined局部變量的值,恰好就是undefined,處理方式甚是巧妙。io
不過,我發現目前如下的四種方式返回結果都是undefined,是否是說明如今的JavaScript也已經很好的避免了undefined污染的問題呢?function
<script type="text/javascript"> (function (window, undefined) { alert(undefined); })(window); </script> <script type="text/javascript"> var undefined = 'myValue'; (function (window) { alert(undefined); })(window); </script> <script type="text/javascript"> var undefined = 'myValue'; (function (window, undefined) { alert(undefined); })(window); </script> <script type="text/javascript"> var undefined = 'myValue'; window.undefined = 'myValue_2'; (function (window) { alert(undefined); })(window); </script> <script type="text/javascript"> var undefined = 'myValue'; window.undefined = 'myValue_2'; (function (window, undefined) { alert(undefined); })(window); </script>