jQuery源碼解讀一

(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>
相關文章
相關標籤/搜索