立即执行函数

 立即执行函数


1,自动执行、执行完毕后立即释放,不会像普通函数一样保留在GO里

2,立即执行函数 IIFE  -->immediately invoked function expression 

//写法
(function (){}())
(function (){})()  //w3c建议

//传参
(function test(a,b){}(1,2))

//返回值
var num = (function (a,b){return a+b}(3,4))  //num:7

//错误写法
function test(){}();//报错  
上面会被解析为:
function test(){};();//()立即执行符号没有参数会报错

//可以执行写法
var a = function test(){console.log(1)}()  //输出1
+function test(){}                         //可以执行,因为变成表达式了
0 || function test(){}()
2 && functiontest(){}() 

//一定是表达式才能被执行符号执行,
  被括号包裹住的函数变成了表达式,因此可以被执行符号执行


function test(a){console.log(a)}(1)   //不报错,但是不是立即执行函数,认为(1)是一个表达式

()会返回逗号最后一个的内容  //(1,2,3)返回3
(console.log(1),console.log(1)) //控制台输出1,1,但是返回undefined

---------------------------------------------------------------------------------
  经典例子
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
}

//立即执行
function test(){
    
    for(var i = 0;i < 10;i++){
         (function(){
            document.write(i+ ' ')    
        }())
    }
   
}
test()

------------------------------------------------------------------
 var a = 10;
if(function b(){}){   
    a += typeof(b)
}
console.log(a)  //10undefined  (function b(){})表达式忽略名字了

你可能感兴趣的:(js深度指南,javascript,前端,vue.js)