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>
相关文章
相关标签/搜索