立即执行函数:此类函数没有声明,在一次执行过后立即释放,适合做针对函数的初始化工作。可以有返回值,有预编译,有执行期上下文。
立即执行函数有以下两种表达形式
(function (形参) {函数体} (实参) );
w3c建议使用这种形式
(function (形参) {函数体} )(实参 );
立即执行函数的组成方式为“函数名+();” “();”在类似的表达式中作为执行符号,用来执行表达式。所以立即执行还可以写成这样+(-/!/&&/||)function ( ){ }( );
还有这样var x = function ( ){ }( );
暂时先回到闭包的问题
现在我们了解了立即执行函数之后就可以解决上节课的遗留问题了
function test (){
var arr = [];
for(var i = 0; i<10; i++)
{
( function(j){
arr[j] = function(){
document.write(j+" ");
}
}(i));//将i传入立即执行函数,执行完立即销毁
}return arr;//实时将数组传出
}
//test define ==> testAO: i=0
var myArr = test();
//test doing ==> arrAO: i=1; j=i;
for (var j = 0; j < 12; j++){
myArr[j]();//0 1 2 3 4 5 6 7 8 9
}
这样借用立即执行函数,我们就轻松的解决了闭包所遗留下来的问题了。