标签:
通常定义函数并调用
function a(){
}
a();
或是
var a = function(){
}
a();
但是查看jquery源码会发现它最外层的架构是这样的
(function( window, undefined ) {
// jquery code
})(window);
解释:首先jquery是定义了一个匿名函数(所谓的匿名函数就是没有名字的函数,顺便说一下闭包的概念:闭包就是在一个函数内部定义一个函数指向外部函数的一个成员变量,并且内部定义的这个函数访问外部函数中定义的临时变量)
,在最上面的例子中a实际上是function的一个引用,只要在函数的引用后面添加()就能让函数执行,那可不可以直接在匿名函数后面添加()让匿名函数执行呢
function(){}()
执行你会发现报错,javascript引擎在扫描到function时会认为这个一个函数的声明,所以直接在后面调用()会报错,在一个语句后面直接添加括号和一个表达式后面添加括号是两个概念,在语句后面添加的操作符会被认为是分组符号,分组符号内部需要传入表达式才行,如果上面的改成function(){alert("1")}(1)就不会报错,但是上面的函数还是不会执行,这只是相当于定义了2个毫无关系的表达式,function(){}(1);在表达式后面添加括号会让表达式立即执行,但是如果是一个表达式后面添加()就会执行,所以
在匿名函数外面添加()然后再在括号后面添加()就可以进行调用了
javascript中()括起来的部分是不能包含语句的,会被当作表达式处理,所以如果function被()括起来以后就被javascript引擎作为function表达式处理了。
因此jquery最外层就是一个自调用匿名函数。但是他这么做的最大原因是想定义一个命名空间,这样就不会和全局的变量出现冲突
更多jquer、.net、sqlserver学习资料欢迎访问 http://www.itservicecn.com/
标签:
原文地址:http://www.cnblogs.com/mfc-itblog/p/5315412.html