Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >理解JavaScript立即执行函数

理解JavaScript立即执行函数

原创
作者头像
伯爵
修改于 2019-10-11 02:56:08
修改于 2019-10-11 02:56:08
1.1K0
举报
文章被收录于专栏:前端小菜鸟前端小菜鸟

IIFE (Immediately Invokable Function Expressions):是在函数声明后立即调用的函数表达式。

立即执行函数通常包含两种使用格式,具体使用那一种风格可以根据个人习惯和团队规范选择:

代码语言:txt
AI代码解释
复制
// 第一种:
(function() {/* */})();

// 第二种:
(function(){/* */}())

// 也可以使用箭头函数声明
;(() => {/* */}())

数学符号都会导致函数立即执行,因为JavaScript引擎会将函数判断为表达式,而不是函数声明。

代码语言:txt
AI代码解释
复制
!function(){}();
+function(){}();
-function(){}();
~function(){}();

new关键字也会导致函数被立即执行。

代码语言:txt
AI代码解释
复制
new function(){ /* code */ }
new function(){ /* code */ }() 

IIFE的进阶使用是把它们作为函数调用进行传参调用:

代码语言:txt
AI代码解释
复制
var val = "global";
(function(global){
    var val = 'function';
    console.log(val) //function
    console.log(global.val) //global
}(window))

console.log(val)  //global

IIFE函数的作用:

  • 避免污染全局 在JavaScript函数内部,会形成一个块级作用域的概念,可以利用IIFE函数避免全局污染,比如JQuery插件的封装模式:(function($){ ``` //JQuery插件 })(jQuery);
  • 倒置代码的运行顺序

这是一个《你不知道的JavaScipt》上的一个经典的例子, 在UMD(Universal Module Definition)项目被广泛使用:

代码语言:txt
AI代码解释
复制
var val = 'global';
(function(fun){
    fun(window);
})(function def(global) {
    var val = 'function';
    console.log(val); //function
    console.log(global.val); // global
})
  • 模块模式

IIFE函数可以创建单例对象,我们成为模块模式。

代码语言:txt
AI代码解释
复制
var count = (function() {
    var initVal = 0;
    var number = initVal;
    return {
        init: function() {
            number = initVal; 
        },
        get: function() {
            return number;
        },
        set: function(val) {
            number = val;
        },
        add: function() {
            return ++number;
        }
    }
}());

console.log(count.get()); //0
count.set(10);
console.log(count.add());//11
count.init();
console.log(count.add());// 1
参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入理解立即执行函数
立即执行函数常用于第三方库,它可以用来隔离变量作用域,很多第三方库都会存在大量的变量和函数,在ES5环境下为了避免变量污染,开发者想到的解决办法就是使用立即执行函数。
神奇的程序员
2022/04/10
1.4K0
立即执行函数
这两种格式都能保证函数立马执行,这也是立即函数的基础常见的格式,()运算符加上匿名函数,还有另外几种格式也能立即执行:
wade
2020/04/24
1.7K0
JavaScript立即执行函数(IIFE)的使用
js的立即执行函数(IIFE)有两种写法,分别为:(function ( ){})( ) 与 (function ( ){}( )) ,这两种写法基本上是没有区别的。
OECOM
2020/07/01
2.4K0
深入理解 JavaScript 立即执行函数表达式(IIFE)
IIFE(Immediately Invoked Function Expression)是一种 JavaScript 函数的写法,这种函数在定义后立即执行。它的基本语法是:
訾博ZiBo
2025/01/13
1420
JavaScript的IIFE(即时执行方法)
前面的话   严格来讲,IIFE并不是闭包,因为它并不满足函数成为闭包的三个条件。但一般地,人们认为IIFE就是闭包,毕竟闭包有多个定义。本文将详细介绍IIFE的实现和用途 实现   函数跟随一对圆括号()表示函数调用 //函数声明语句写法 function test(){}; test(); //函数表达式写法 var test = function(){}; test();   但有时需要在定义函数之后,立即调用该函数。这种函数就叫做立即执行函数,全称为立即调用的函数表达式IIFE(Imdiately
庞小明
2018/03/07
1.5K0
JavaScript立即执行函数的解释分析(4)—总结篇
这次来对立即执行函数 Immediately-Invoked Function Expression (IIFE) ,做最后的总结,会把前面几篇提到的内容做一个整合,这样立即执行函数就算是说完了。
FEWY
2019/05/26
5340
【深度剖析】JavaScript中块级作用域与函数作用域
沉浸式趣谈
2024/03/13
3090
【深度剖析】JavaScript中块级作用域与函数作用域
一文讲透JavaScript闭包与立即执行函数表达式(IIFE)
闭包是一种函数的特性,用于捕获和保存其所在作用域的变量,而IIFE是一种用来创建函数作用域的模式。在JavaScript中,我们可以将闭包和IIFE结合使用,但它们并不是彼此依赖的概念。
anyup
2023/11/22
1.3K0
一文讲透JavaScript闭包与立即执行函数表达式(IIFE)
JS与ES6高级编程学习笔记(二)——函数与作用域
开发者常戏称"函数是JavaScript中的一等公民",这足以体现了函数的重要性,为了更好的掌握函数我们需要学习函数的构造器Function等相关内容。
张果
2022/05/31
1.4K0
JS与ES6高级编程学习笔记(二)——函数与作用域
IIFE 立即执行函数表达式
IIFE全称为Immediately Invoked Function Express-立即执行函数(表达式),顾名思义,是在定义之后立即执行的函数。IIFE主要以保护变量范围著称,时候也会被称为“自执行的匿名函数”(self-executing anonymous function)。
泯泷、
2024/03/11
1290
前端开发:立即执行函数(function(){}())与(function(){})()的区别
声明一个函数,然后立即调用该函数,这时候的该函数就是一个立即执行函数,换句话说就是声明函数以后立即执行该函数就叫做立即执行函数,即IIFE (Immediately Invoked Function Expression)。通常立即执行函数会以匿名函数的形式来声明,匿名函数的写法格式为
三掌柜
2024/12/31
1000
JavaScript词法作用域(你不知道的JavaScript)
1. JavaScript引擎在代码执行前会对其进行编译,在这个过程中,像var a = 2 这样的声明会被分解成两个独立的步骤: 第一步(编译阶段):var a 在其作用域中声明新变量。这会在最开始的阶段,也就是代码执行前进行。 第二步(运行阶段):a = 2 会查询变量a(LHS查询)并对其进行赋值。 2. LHS & RHS(当前作用域->上级作用域->...->全局作用域) LHS(左侧):试图找到变量的容器本身 RHS(右侧):查找某个变量的值 示例:
奋飛
2019/08/15
5460
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
一、闭包(Closure) 1.1、闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9;方法:找到所有的div,
张果
2018/01/04
1.6K0
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
深入理解JavaScript中的函数
函数于软件开发者而言并不是什么奇幻世界。如果你的日常活动涉及到编码,哪怕是一点点,那么在一天结束的时候,你一定创建/修改了一个或多个函数。
疯狂的技术宅
2019/03/28
5990
深入理解JavaScript中的函数
细说JavaScript闭包
JavaScript 闭包难点剖析一、作用域基本介绍ES6之前只有全局作用域与函数作用域两种,ES6出现之后,新增了块级作用域1.全局作用域在JavaScript中,全局变量是挂载在window对象下的变量,所以在网页中的任何位置你都可以使用并且访问到这个全局变量当我们定义很多全局变量的时候,会容易引起变量命名的冲突,所以在定义变量的时候应该注意作用域的问题var globalName = 'global'function getName() { console.log(globalName) // gl
hellocoder2029
2022/10/21
2220
JavaScript学习总结(五)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用,
张果
2018/01/04
2.9K0
JavaScript学习总结(五)——jQuery插件开发与发布
【JS】预编译详解
函数dmeo为经声明就可正常调用,执行函数demo时,先将1赋值给b,再将b的值赋值给a;虽然a、b是在函数作用域中,但由于b未经声明,所以下面在browser环境中输出的结果表明b 在 window 属性中,而 a 则不会出现在全局对象中;函数demo的声明是在全局作用域,所以它归window对象所有
好吃懒洋洋
2022/11/15
1.3K0
【JS】预编译详解
立即执行函数表达式(IIFE)
原文:immediately-invoked-function-expression 译者:nzbin 也许你还没有注意到,我是一个对术语比较坚持的人。因此,在听到很多次比较流行却容易产生误导的 JavaScript 术语“自执行匿名函数”之后,最终我决定把我的想法写成一篇文章。 为了提供关于这一模式如何运作的透彻信息,我已经提出了我们应该如何称呼它的建议,继续向下看。当然,如果你想跳过开头,你可以只看“自执行函数表达式”这一节,但是我建议你看完整篇文章。 请明白这篇文章并非要表达“我是对的,你是错的”
叙帝利
2018/01/17
9400
你真的知道『立即执行函数』吗?
立即地 调用 (函数 表达式 )
用户9914333
2022/07/22
6560
JavaScript 函数作用域和块作用域不完全指北
我们在 JavaScript 词法作用域不完全指北 中介绍了词法作用域,词法作用域是由你写代码时将变量和块作用域写在哪里来决定的,词法分析器处理代码时会保持作用域不变。那么究竟什么时候才会生成新的作用域呢?最常见的答案是 JavaScript 具有基于函数的作用域,这意味着每声明一个函数都会为其自身创建一个作用域。
撸码那些事
2019/07/30
6350
相关推荐
深入理解立即执行函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档