匿名函数块级作用域以及在 JQuery 中的应用

最近经常回在群里面看到有些朋友问如下这样的 js 写法该如何理解的的问题,虽然可能对匿名函数有些理解,但是有时候看到 JQuery 源码或者其他 JS 库中同样的写法时,就有点不理解了,今天再次分享下这方面的知识点。

(function(){

})(JQuery);

对以上写法的理解:

  上面的这种写法通常叫做“块级作用域”,块级作用域的好处就是可以将匿名方法内部的变量进行私有化,当程序运行结束之后便将一些变量自动销毁。第一个()号表示次函数为一个函数表达式,其中包含了一个匿名函数,后面的一个()则表示执行这个函数表达式中的匿名方法,而 JQuery 则作为这个匿名函数的一个参数。

匿名函数

  通常声明一个匿名函数的方法是:

//匿名函数
var getPerson = function() { //次方法为函数表达式的声明方法
}
getPerson();//调用匿名方法

所以大家又可以把上面的代码看成是这样子的:

function() {
}();

但是,虽然逻辑上是这么一回事,但是你如果按照上面的这种写法,运行的时候会出现语法错误的问题。所以这个时候利用()这个分组操作符括起这个函数表达式即可,然后括号()执行此函数。(关于函数声明的方法以及函数表达是的内容可以参考汤姆大叔的这篇文章http://www.cnblogs.com/TomXu/archive/2011/12/29/2290308.html

JQuery 中的应用:

//此块级作用域中声明了2个参数
(function( window, undefined ) {

    // Use the correct document accordingly with window argument (sandbox)
    var location = window.location,
    document = window.document,
    docElem = document.documentElement,

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,

    // Map over the $ in case of overwrite
    _$ = window.$;

}( window );//将window对象作为参数传入了方法内

上面的代码是我截取的 JQuery 源码的一部分。想要了解的朋友可以自己去看。以上就是我对一些理解,有问题的地方或者交流的朋友可以联系我。


最后修改于 2014-02-21