美文网首页
关于自执行函数(立即执行函数)

关于自执行函数(立即执行函数)

作者: aermin | 来源:发表于2017-04-26 23:53 被阅读0次

tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易理解的方式写好每一篇博客,大家一起学习交流😄。

什么是自执行函数?

一下有三种写法

1.最前最后加括号

(function(){alert(1);}()); 

这种方法好处是能提醒阅读代码的人,这段代码是一个整体。 坏处是前面的代码行后记得加分号,不然会报错。如:

var a=1 
(function(){alert(1);}()); 

2.function外面加括号

(function(){alert(1);})(); 

这种做法比方法1少了一个代码整体性的好处.

3.function前面加运算符,常见的是!与void 。

!function(){alert(1);}(); 
void function(){alert(2);}();

显然,加上“!”或“+”等运算符,写起来是最简单的。加上“void ”要敲五下键盘,但是听说有一个好处是,比加"!"少一次逻辑运算。

网上的图
  • 首先声明一个匿名函数 function(){alert('我是匿名函数')}。
  • 然后在匿名函数后面接一对括号 (),调用这个匿名函数。

自执行函数的作用

创建一个独立的作用域,这个作用域里面的变量,外面访问不到(即避免「变量污染」)

例子来看一个著名的面试题:

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  liList[i].onclick = function(){
    alert(i) // 为什么 alert 出来的总是6,而不是0、1、2、3、4、5
  }
}

为什么 alert 的总是 6 呢?

因为 i 是贯穿整个作用域的,而不是给每个li 分配了一个i,如下:

也是网上的图

那么怎么解决这个问题呢?

用立即执行函数给每个li创造一个独立作用域即可(当然还有其他办法):

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  !function(ii){
    liList[ii].onclick = function(){
      alert(ii) // 0、1、2、3、4、5
    }
  }(i)
}

在立即执行函数执行的时候,i 的值被赋值给 ii,此后 ii 的值一直不变。i 的值从 0 变化到 5,对应 6 个立即执行函数,这 6 个立即执行函数里面的 ii 「分别」是 0、1、2、3、4、5。

(整理自网络)

相关文章

  • 关于自执行函数(立即执行函数)

    tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易...

  • JS基础 -- 立即执行函数

    /** 立即执行函数* 函数定义完,立即被调用,这种函数焦作立即执行函数* 立即执行函数往往只会执行一次** ...

  • 简单了解JS自执行函数

    1、常见的function写法如下: 2、自执行函数 自执行函数也叫立即调用函数。在函数体后面加括号就能立即调用,...

  • 立即执行函数

    立即执行函数(IIFE),也叫做自执行函数,就是不需要调用就立马执行的函数。 在解释立即函数的时候,我们先了解一下...

  • 立即执行函数

    本文涉及知识点 什么是立即执行函数? 立即执行函数有什么用? 什么是立即执行函数? 立即执行函数就是: 声明一个匿...

  • js基础知识点

    一、函数立即执行和自执行立即执行在声明类似function foo(){}或var foo = function(...

  • 九 立即执行函数

    立即执行函数除了执行完立即释放,跟普通函数没有区别。 返回值,执行期上下文,预编译等函数有的,立即执行函数都是有的...

  • 复习笔记之API(14)

    立即执行函数 立即执行函数:不需要调用,立马能够自己执行的函数作用:创建一个独立作用域,立即执行函数里面所有的变量...

  • JS重要概念之立即执行函数与闭包高级

    #立即执行函数表达式IIFE,简称“立即执行函数” 立即执行函数表达式,IIFE(immediately-invo...

  • Js立即执行函数

    js立即执行函数可以让你的函数在创建后立即执行,js立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,...

网友评论

      本文标题:关于自执行函数(立即执行函数)

      本文链接:https://www.haomeiwen.com/subject/ypzwzttx.html