ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【JavaScript进阶之旅】 立即执行函数

2021-08-01 14:34:01  阅读:160  来源: 互联网

标签:function 10 arr 进阶 之旅 JavaScript 面试题 test var


在这里插入图片描述

文章目录

立即执行函数

立即执行函数简称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
}
  1. 为什么最后输出十个十?
  2. 修改代码将最后输出结果输出为0-9,你能用多少种方法实现?
方法一
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  
// 表达式忽略函数名

写在后面:
觉得写的还行,评论,收藏,点赞,关注哦~

标签:function,10,arr,进阶,之旅,JavaScript,面试题,test,var
来源: https://blog.csdn.net/Lyb__/article/details/119297689

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

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

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

ICode9版权所有