立即执行函数
此类函数没有声明,执行一次就被释放,函数声明释放==undefined,适合初始化工作
两种写法:
1)(function(){}())—–常用
2)(function(){})()
(function 可名字(可有形参){ 可有执行函数,返回值 } (可有实参))
注意:只有表达式才能被执行符号执行
( function ( ) { } ( ) ) 里面的 function ( ) { } 是表达式,被最后一个()符号执行
如:
1)
function test() {}()//不可执行,不是函数表达式
2)
var num=function () {}()//可执行,var num 变量声明,function(){}赋值到num里的过程叫表达式
3)
+function abc() {}()//可执行,+(正号)将后面的函数声明转化为表达式,自动忽略表达式的名字,-(负号)!
特殊例子:
1、
function test(a, b, c, d) {
console.log(a + b + c + d);
}(1, 2, 3, 4)
不会报错
系统会理解成
function test(a,b,c,d) {
console.log(a + b + c + d);
}
(1, 2, 3, 4);//这行表达式没意义,‘,’也是运算符
闭包+立即执行函数 将例1改变
例2
执行结果 0 1 2 3 4 5 6 7 8 9
function test() {
var arr=[];
for(var i=0;i<10;i++){
(function (j) {
arr[j]=function () {
document.write(j+" ");
}//function () { document.write(j+" ")}此函数内保存了立即执行函数的作用域
}(i));//立即执行函数
}//循环内立即执行函数循环10次
return arr;
}
var myarr=test();
for(var j=0;j<10;j++){
myarr[j]();
}
小例子:
var a=(function f() {
return 5;
});//立即执行函数,f未经声明,会报错,但typeof f undefined
console.log(f);//报错,f is not defined
立即执行函数撤销的是函数的声明 所以 typeof f—–undefined