Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
haizhilin2013 opened this issue May 26, 2019 · 13 comments
Open

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

haizhilin2013 opened this issue May 26, 2019 · 13 comments
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

第41天 说说你对IIFE的理解

@haizhilin2013 haizhilin2013 added the js JavaScript label May 26, 2019
@cleverboy32
Copy link

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

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

@wenyejie
Copy link

wenyejie commented May 27, 2019

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

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

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

@cleverboy32
Copy link

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

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

@tzjoke
Copy link

tzjoke commented May 28, 2019

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

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

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

@myprelude
Copy link

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

;(function(){
})()

@seho-dev
Copy link

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

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

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

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

@ZindexYG
Copy link

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

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

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

另一种也很常用:

(function(){}());

什么时候使用

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

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

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

@blueRoach
Copy link

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

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

@Alex-Li2018
Copy link

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

@MrZ2019
Copy link

MrZ2019 commented Oct 13, 2020

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

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

1 similar comment
@MrZ2019
Copy link

MrZ2019 commented Nov 2, 2020

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

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

@HNHED
Copy link

HNHED commented Sep 4, 2021

什么是IIFE?

IIFE:立即调用函数表达式

(function (){
    statements
})();

它包含两部分

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

@xiaoqiangz
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests