其他分享
首页 > 其他分享> > 关于立即执行函数

关于立即执行函数

作者:互联网

逗号运算符 

先说一个学到的小知识点,那便是逗号运算符。逗号运算符,如果在括号中有多个值,用逗号分隔,那只会执行最后那个。具体如下:

         var a = (1,3,'fe',6)
         console.log(a);//6
         var a = (1,3,'fe')
         console.log(a);// fe

然后便是今天的重点,立即执行函数(IIFE)。

执行函数(IIFE)

     执行函数有多种写法,大致分为三种。立即执行函数,IIFE 立即执行一次然后销毁  一定是表达式才能被执行符号执行。

(function () {
            console.log(1);
        })();  //打印1
        var test1 = function (a) {
            console.log(2);
        }
        test1();//打印2
        + function test2() {
            console.log(3);
        }();//如果没有前面的加号那只是函数声明,报语法错误
        //函数声明变成表达式的方法 + - ! || &&
        function test3(a){
          console.log(4);
        }(6)//不报错,但无输出,而且括号不写6,不传值,就报错了

第二种:

//第二种
        (function () {
            console.log(666);
        }()) //输出666,w3c建议写法

第三种,重点,开发常用

//第三种,重点,开发常用
        function test() {
            var arr = [];
            var i = 0
            for (; i < 10;) {
                arr[i] = function () {
                    document.write(i+"  ");
                }  
                i++             
            }
            console.log(arr);
            return arr;
        }
        var myArr = test();
        for (var j = 0; j < 10; j++) {
            myArr[j]();
        }

猜猜结果是怎样的?

分析一下: test函数执行返回数组arr,并赋给myArr。arr原来为空,但循环了十次,而且每一项都是一个匿名函数function。所有打印arr的结果就是输出一个有十个元素都为function的数组。后面的for循环显然是执行这十个function。 而且上一个循环结束的下一步就是返回,上个循环结束时i=10;因为arr是return出来的,形成了闭包,保存了test的AO,AO里面有i=10。所以document.write(i)的结果是10,最后屏幕上显示10个10。

看看这个题

 var a = 10;
        if(function b(){}){
            a += typeof(b)
        }
        console.log(a);

结果是10undefined    为什么呢?  function b (){} 显然为真,因为不是错误的五种类型如:undefined,null,false,"",{},所以会继续执行下去,那b是什么呢。关键点在于(function b(){}),加了括号就是表达式,里面是函数声明,有没有b都一样,所以b是undefined.

标签:function,10,arr,console,函数,立即,var,执行,log
来源: https://blog.csdn.net/AlovingJ/article/details/122190872