立即执行函数:
一般是函数长度过长,而且只执行一次。
针对初始化功能的函数
形式
形参和实参
立即执行函数也有预编译过程
立即执行函数写法:
1,(function (){}()) w3c建议第一种
2,(function (){})()
看下面:
这是一个函数,一般我们在控制台调用函数的时候,直接使用test();就可以了,因为我们使用的方法是test加括号
那么我现在在函数声明之后直接加括号,能不能运行呢?
事实说明是不行的
这是因为只有表达式才能够被执行符号(括号)执行
123;也是叫表达式
上面的式子是函数声明,不是表达式
在看下面
这样就可以了
这是因为上面那个式子是函数表达式,不是函数声明,之前有讲过,函数声明的方式总的有两种,一种是函数声明,一种是函数表达式,虽然都可以声明函数,但其实作用是不一样的
接下来再看刚才的那个函数,
发现函数被立即执行之后,test就不再代表函数了
所以说,能被立即执行符号执行的表达式,再被立即执行之后,就变成了立即执行函数
我们说上面那个是函数声明,那么现在,在前面加一个正号
发现其变成了立即执行函数
同理,- , !,&&(要能运行到函数) ,|| (同上)
最后我们也知道括号也算数学计算符,
所以如下:
(function test(){})
先使用一对括号将函数声明变成表达式,
(function test(){})()
然后再使用一对括号,将其执行,
我们再精简一下,把后面的括号放里面
先执行外面的括号,变成表达式,然后再执行里面的表达式
然后我们发现,test在使用之后就没有任何意义了,
所以我们把test去掉,就变成了我们现在的立即执行函数
在看下面的情况:
这是由于括号会将函数变为表达式,就变成了立即执行函数,然后f执行完之后,就消失了,所以变成了undefined