立即执行函数简称IIFE
,顾名思义,立即执行并且执行完毕后销毁
immediately invoked function expression
自动执行函数,执行完成后立即释放
// 写法一 (function(){})(); // 写法二 (function(){}()); // W3C建议
只要括号包起来就是表达式了
(function(){})
表达式才能被执行符号执行
(function(){})(); // 表达式 -》 可以执行 var test1 = function(){}(); // 可以执行 function test(){}(); // 报错 -》 不是表达式
立即执行函数,执行完毕后就销毁
var test = function(){ console.log(1); } console.log(test); // f(){console.log(1);}
var test2 = function(){ console.log(2); }(); console.log(test2); /** 2 undefinde */
函数声明变为表达式的方法
+ - ! || &&
+ function test(){}(); - function test1(){}(); ! function test2(){}(); ...
function test(){ var arr = []; for(var i = 0; i < 10; i++){ arr[i] = function(){ document.write(i + ''); } } return arr; } var myArr = test(); for(var j = 0; j < 10; j++){ myArr[j](); // 10 10 10 10 10 10 10 10 10 10 }
function test(){ var arr = []; for(var i = 0; i < 10; i++){ arr[i] = function(num){ document.write(num + ''); } } return arr; } var myArr = test(); for(var j = 0; j < 10; j++){ myArr[j](j); }
function test(){ var arr = []; for(var i = 0; i < 10; i++){ (function(j){ arr[j] = function(){ document.write(j + ''); } }(i)); } return arr; } var myArr = test(); for(var j = 0; j < 10; j++){ myArr[j](); }
var fn = ( function test1(){ return 1; }, function test2(){ return '2'; } )(); console.log(typeof(fn)) // string // ==================== var fn = ( function test1(){ return 1; }, function test2(){ return '2'; } ); console.log(typeof(fn)) // function
var a = 10; if(function b(){}){ a += typeof(b); } console.log(a); // 10undefined // 表达式忽略函数名
写在后面:
觉得写的还行,评论,收藏,点赞,关注哦~