ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于立即执行函数

2021-12-28 23:31:36  阅读:110  来源: 互联网

标签:function 10 arr console 函数 立即 var 执行 log


逗号运算符 

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

         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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有