立即执行函数(IIFE)的定义及用法

1.什么是IIFE

    IIFE立即执行函数表达式,全称为Immediately-invoked function expression,是一种在避免全局命名和变量污染时常用的一种手法

     在ES5中,由于没有块级作用域的相关说法,如下

 for(var i = 1;i<5;i++){

    console.log(i);

 }

console.log('i的值为:',i);

   我们仍然可以在for循环结束后,访问for循环中定义的相关变量。就如同虽然我们在这个for循环里面设置的一个变量,但是他也会提升到全局作用域中,即我们在外面也会访问到相关的变量,这样就会造成变量污染。我们通常想的是在for循环中定义的循环变量i,通常就只是用来变量的,就希望一旦结束for循环之后,那么这个变量也会随之销毁,那么我们就可以使用IIFE,立即执行函数表达式来进行相关操作

2.IIFE的来源

    其实说了这么多,IIFE其实也就是匿名函数,归根结底都是函数,那么函数的定义其实就只有两种,如下,一种是申明式,一种是表达式。但是两种其实存在着不同,其中第二种中存在着变量提升,后续文章会持续更新

function f1()    //函数申明是
var f2 = function()  //函数表达式(其中存在着变量提升的情况,后续文章中会持续更新)

 3.IIFE的使用

     其实每句话后面的;可以去掉,但是如果是使用了IIFE声明的函数,那么函数最近的一句话的结尾的;就不能省掉,为什么呢?如果省掉的话,就会默认为未说明完,会将下面的和上面的放在一起,这个后续有关分号的相关内容也会进行更新,但是通常我们会在IIFE前面加上分号,如下所示,这就是一个相关的IIFE定义的函数。其实IIFE所定义的函数我们也可以通过定义普通函数实现一样的功能,不过就是写法稍微麻烦了一些罢了。

var b = 1
;(function () {
  var b = 2
  console.log('b的值',b);
})()
console.log(b);

4.IIFE的总结

1 .创建块级(私有)作用域,避免了向全局作用域中添加变量和函数,因此也避免了多人开发中全局变量和函数的命名冲突;有着很好的独立性。

2 .在IIFE中声明的变量或者函数,都会在执行完后立即销毁,这种做法可以减少闭包问题中的内存,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域链了;同时也避免了过多占用内存的相关情况

你可能感兴趣的:(JS,javascript)