JavaScript中的IIFE示例解析

 更新时间:2024年12月17日 16:52:24   作者:半桶水专家  
IIFE 是 JavaScript 中一种重要的设计模式,适用于隔离作用域、避免全局变量污染以及一次性执行的逻辑,这篇文章主要介绍了JavaScript中的IIFE解析,需要的朋友可以参考下

在 JavaScript 中,IIFEImmediately Invoked Function Expression,立即调用函数表达式)是一种设计模式,用于创建一个在定义后立即执行的函数。

IIFE 的语法通常如下:

(function () {
  // 函数体
})();

或者:

(function () {
  // 函数体
}());

两种形式都可以达到相同的效果,主要区别在于个人编码风格的偏好。

IIFE 的解析与执行

1. 为什么需要括号?

JavaScript 中的函数分为两种形式:

  • 函数声明(Function Declaration):以 function 关键字开头,并且后面有函数名。
  • 函数表达式(Function Expression):function 关键字出现在表达式的上下文中(如赋值操作、括号内等)。

如果直接写:

function () {
  console.log('IIFE');
}();

会抛出语法错误 SyntaxError: Unexpected token '(',因为 JavaScript 解析器会把它当作一个函数声明,但函数声明要求有名字。

为了解决这个问题,我们可以用括号包裹整个函数,使其变成函数表达式:

(function () {
  console.log('IIFE');
})();

括号告诉解析器,这不是一个函数声明,而是一个表达式,随后直接调用即可。

2. IIFE 执行过程

  • function () { ... } 被括号包裹后变成了一个函数表达式。
  • 紧跟着的 () 表示立即调用这个函数。
  • IIFE 会在解析到时立即执行,而无需额外调用。

IIFE 的作用

避免全局变量污染 IIFE 可以创建一个独立的作用域,用于封装变量和逻辑,避免它们泄漏到全局作用域。

(function () {
  var a = 10;
  console.log(a); // 10
})();
console.log(a); // 报错:a is not defined

模块化代码 在 ES6 模块化普及之前,IIFE 是模拟模块化的常用方式。

var module = (function () {
  var privateVar = 'This is private';
  return {
    publicMethod: function () {
      console.log(privateVar);
    },
  };
})();
module.publicMethod(); // 输出:This is private

初始化逻辑

IIFE 常用于在脚本加载时执行一次的初始化逻辑。

(function () {
  console.log('Initializing application...');
  // 执行初始化代码
})();

避免与其他代码冲突

当多个脚本同时运行时,IIFE 能有效隔离每个脚本的变量,避免冲突。

IIFE 的其他形式

带参数的 IIFE

(function (name) {
  console.log('Hello, ' + name);
})('World'); // 输出:Hello, World

带返回值的 IIFE

var result = (function () {
  return 42;
})();
console.log(result); // 输出:42

箭头函数 IIFE

在现代 JavaScript 中,可以使用箭头函数写 IIFE:

(() => {
  console.log('This is an arrow function IIFE');
})();

总结

IIFE 是 JavaScript 中一种重要的设计模式,适用于隔离作用域、避免全局变量污染以及一次性执行的逻辑。在 ES6 之后,随着 letconst 和模块化的普及,IIFE 的使用有所减少,但它仍然是一个值得理解的模式。

到此这篇关于JavaScript中的IIFE解析的文章就介绍到这了,更多相关js中的IIFE内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单谈谈json跨域

    简单谈谈json跨域

    本文主要给大家讲解了javascript中的json跨域问题,以及跨域安全性的解决办法,总结了2点,分享给大家,希望大家能够喜欢。
    2016-03-03
  • JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】

    JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】

    这篇文章主要介绍了JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法,结合实例形式详细分析了针对迷宫游戏路径搜索算法的普里姆算法相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2018-12-12
  • JavaScript中return false的用法

    JavaScript中return false的用法

    这篇文章主要介绍了JavaScript中return false的用法,在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为,需要的朋友可以参考下
    2015-03-03
  • JS中实现一个下载进度条及播放进度条的代码

    JS中实现一个下载进度条及播放进度条的代码

    这篇文章主要介绍了JS中实现一个下载进度条及播放进度条的代码,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • js事件委托和事件代理案例分享

    js事件委托和事件代理案例分享

    这篇文章主要为大家分享了js事件委托和事件代理案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • JS实现的5级联动Select下拉选择框实例

    JS实现的5级联动Select下拉选择框实例

    这篇文章主要介绍了JS实现的5级联动Select下拉选择框,涉及javascript数组调用及遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • Javascript模块模式分析

    Javascript模块模式分析

    javascritp模式讲解全局变量是魔鬼。在YUI中,我们仅用两个全局变量:YAHOO和YAHOO_config。YUI的一切都是使用YAHOO对象级的成员或这个成员作用域内的变量。我们建议在你的应用程序也使用类似的规则。
    2008-05-05
  • 关于JavaScript实现动画时动画抖动的原因与解决方法

    关于JavaScript实现动画时动画抖动的原因与解决方法

    最近在使用JS动画做一些练习的时候我发现在动画执行时间内快速移开鼠标时会出现动画因鼠标移动过快从而导致代码冲突让画面抖动的bug,这篇文章主要给大家介绍了关于JavaScript实现动画时动画抖动的原因与解决方法,需要的朋友可以参考下
    2022-06-06
  • JavaScript中instanceof与typeof运算符的用法及区别详细解析

    JavaScript中instanceof与typeof运算符的用法及区别详细解析

    这篇文章主要是对JavaScript中instanceof与typeof运算符的用法及区别进行了详细的分析介绍。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • zeroclipboard复制到剪切板的flash

    zeroclipboard复制到剪切板的flash

    虽然网上实现Ctrl + C的JS代码已经有很多了,但我还是向大家推荐一个比较好的插件zeroclipboard,兼容所有浏览器
    2010-08-08

最新评论