zoukankan      html  css  js  c++  java
  • jQuery源码分析

    (function( window, undefined ) {
        // jquery code
    })(window);
    

      

    1. 这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行
    2. 为什么要创建这样一个“自调用匿名函数”呢?

    通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。

    1. 匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法(注意标红了的右括号):

    (function() {

        console.info( this );

        console.info( arguments );

    }( window ) );

    (function() {

        console.info( this );

        console.info( arguments );

    })( window );

    1. 为什么要传入window呢?

    通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:

    (function(a,b){})(window); // window 被优化为 a   

    1. 为什么要在在参数列表中增加undefined呢?

    在 自调用匿名函数 的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值。

    undefined = "now it's defined";

    alert( undefined );

    浏览器测试结果:

    浏览器

    测试结果

    结论

    ie

    now it's defined

    可以改变

    firefox

    undefined

    不能改变

    chrome

    now it's defined

    可以改变

    • opera

    now it's defined

    可以改变

    1. 注意到源码最后的分号了吗?

    分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。

  • 相关阅读:
    慢性肾炎患者的家庭养护
    中国居民五谷膳食指南
    第二单元丨对环境的察觉
    一个人是否靠谱,闭环很重要
    打赢营销胜仗
    治本修身──中醫內分泌調節養生法
    理想的激励
    卓越演讲:打动听众必知必会的策略和方法(原书第3版)
    每日一题_191008
    每日一题_191007
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2648504.html
Copyright © 2011-2022 走看看