Skip to content

[js] 第41天 说说你对IIFE的理解 #154

Open
@haizhilin2013

Description

@haizhilin2013

第41天 说说你对IIFE的理解

Activity

cleverboy32

cleverboy32 commented on May 27, 2019

@cleverboy32

立即执行函数,函数被创建后即刻执行,所以也不需要函数名,然后释放。一般用于创建其他函数所依赖的环境,这里指闭包。

不知道我的表达正不正确? 还是我说的就是错的? help

wenyejie

wenyejie commented on May 27, 2019

@wenyejie

立即执行函数,函数被创建后即刻执行,所以也不需要函数名,然后释放。一般用于创建其他函数所依赖的环境,这里指闭包。

不知道我的表达正不正确? 还是我说的就是错的? help

BINGO,
理解, 但是可以在具体一些, 有什么作用啊! 干嘛的啊! 有什么优缺点啊! 使用场景啊! 自己的理解啊!...... AND SO ON......

cleverboy32

cleverboy32 commented on May 27, 2019

@cleverboy32

@wenyejie 常见场景有 防抖, 节流以及关于 jsonp 的回调函数。 优点不用生成一个变量? 缺点,在使用闭包时可能引起内存泄露,所以应当注意赋值时不要产生循环引用。

我感觉我面试时,老是回答不出面试官想要的 🙂🙂🙂, 怀疑自己的理解了 ....

tzjoke

tzjoke commented on May 28, 2019

@tzjoke

IIFE 就是 ;(() => {})() 这样的形式。

js es5之前没有块级作用域啊,IIFE就干这个事,就是为了私有化作用域的变量,不过 es5 const let 加入了块级作用域。

题外话:最怕这种说理解的题目,对于一些表达不好的理工科生简直就是致命打🐔

myprelude

myprelude commented on Jun 13, 2019

@myprelude

独立作用域,避免变量冲突问题,很多库就是这个写法

;(function(){
})()
seho-dev

seho-dev commented on Sep 10, 2019

@seho-dev

IIFE是立即执行函数,在一些常见的框架中,会使用立即执行函数形成一个独立作用域,在这个函数通常会写一些依赖环境之类的东西;
立即执行函数中,写完其中的变量不会被销毁,形成闭包

立即执行函数一般是(function (){})() ,还有这样写的 (function (){}()) 它们是等价的
还有一些其他的写法: !funtion (){}() ?funtion (){}() let fun = funtion (){}()
为了让一个匿名函数立即执行要满足2个条件:第一函数体后面一定要有小括号,第二不能是声明函数,一定是函数表达式

那么你肯定会问,刚刚写的这么多例子,不都是函数声明么,那是因为括号运算符或者! , ?,=在一定程度上把函数声明转换为函数表达式了

在立即执行函数中,如果想要访问全局中的变量,直接行参引入window即可;

ZindexYG

ZindexYG commented on Sep 20, 2019

@ZindexYG

(function( window, undefined ) {//……})(window);

jQuery 整個就是一個立即执行函数。

(function(){})(); 是立即执行函数常用的表现形式之一。

另一种也很常用:

(function(){}());

什么时候使用

1.当我们需要写一个 js 插件,并且复用率很高的时候,建议使用

2.如果命名的函数只需要使用一次,建议使用

3.独立模块,这个跟第一点差不多。单独出来,想强调一下立即执行函数的好处,开发的时候,能做到各组合模块的低耦合,减少对全局作用域的污染

blueRoach

blueRoach commented on Jul 15, 2020

@blueRoach

Immediately Invoked Function Expression
立即调用函数表达式

(function(){})()
当代码执行到这里时立即执行,并且外部函数无法访问里面的变量

Alex-Li2018

Alex-Li2018 commented on Aug 11, 2020

@Alex-Li2018

(function(){})()的写法:
目的是模拟私有变量,防止变量全局污染

smile-2008

smile-2008 commented on Oct 13, 2020

@smile-2008

立即执行函数,函数被创建后即刻执行,所以也不需要函数名,然后释放。一般用于创建其他函数所依赖的环境,这里指闭包。

不知道我的表达正不正确? 还是我说的就是错的? help

smile-2008

smile-2008 commented on Nov 2, 2020

@smile-2008

立即执行函数,函数被创建后即刻执行,所以也不需要函数名,然后释放。一般用于创建其他函数所依赖的环境,这里指闭包。

不知道我的表达正不正确? 还是我说的就是错的? help

HNHED

HNHED commented on Sep 4, 2021

@HNHED

什么是IIFE?

IIFE:立即调用函数表达式

(function (){
    statements
})();

它包含两部分

  • 包围在()里的一个匿名函数,拥有独立的词法作用域
  • 再次使用()创建了一个立即执行函数表达式,到此直接执行函数
xiaoqiangz

xiaoqiangz commented on Jun 2, 2022

@xiaoqiangz

自执行函数,函数一旦创建会立即被执行,优点是:函数内部是是作独立的作用域,避免对全局造成变量污染。
例子: (function(){})()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @smile-2008@wenyejie@haizhilin2013@xiaoqiangz@cleverboy32

        Issue actions

          [js] 第41天 说说你对IIFE的理解 · Issue #154 · haizlin/fe-interview