日期:2014-05-16  浏览次数:20430 次

理解javascript中的“自动执行函数”
  因为之前看了jquery的源码,对于源码中的一开始的()();不是很理解,后来到网上查了查,有了大致的了解,怕忘记了,所以记录一下。
(function(a){alert(a)})(1);
//上面的代码就是一个自动执行的js函数,和jquery中的一样。其中的
function(a){alert(a)}
//是一个匿名函数,接受一个参数。随后的(1)表示对这个匿名函数的调用,并且传递了一个参数,这与我们平常声明一个函数,并调用是一样的:
function x(a) {
  alert(a);
}
x();
//现在来说一下对于这个自动执行函数我所理解的执行顺序:
//首先,第一个小括号,也就是“(function(a){alert(a)})”是一个运算符号,就像:
(1+2)*3
//一样,这样,就是把这个匿名函数给返回,同时紧跟着后面的小括号“(1)”就把它给调用了。如果我们把包裹住匿名函数的小括号给去掉的话,
function(a){alert(a)}(1);
//这样,就不会执行。这时,虽然有了匿名函数,但是并没有对这个函数的引用,后面的小括号仅仅是一个运算优先级而已,并不是对方法的执行。
//不过我们这样写就可以执行了:
+function(a){alert(a)}(1);
//或者
-function(a){alert(a)}(1);
//或者
void function(a){alert(a)}(1);
//或者
new function(a){alert(a)}(1);
//上面的写法都可以。
//前面添加的“+,-,void,new”是运算符和执行关键字,这样会强制匿名函数在声明后返回引用,而后面的小括号就是对函数的执行