• 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. 注意到源码最后的分号了吗?

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

  • 相关阅读:
    JQ trigger函数无法触发a标签的两种解决方法
    Normalize.css
    wow.js中各种特效对应的类名
    利用伪元素:after清除浮动
    单词超出隐藏显示省略号(单行或多行)并设置是否将单词打断
    利用伪元素和css3实现鼠标移入下划线向两边展开效果
    css3 兼容各个浏览器
    html 初始化
    将博客搬至CSDN
    Linux配置问题
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2648504.html
Copyright © 2020-2023  润新知