是时候停止使用JavaScript IIFE!

  发布时间:2025-11-05 08:49:05   作者:玩站小弟   我要评论
本文转载自公众号“读芯术”(ID:AI_Discovery)JavaScript语言中,IIFE代表立即调用函数表达式,它是一个定义后即刻执行的函数。为什么我说别再在代码中编写IIFE了?本文将给你答 。

本文转载自公众号“读芯术”(ID:AI_Discovery)

JavaScript语言中,时候使用IIFE代表立即调用函数表达式,停止它是时候使用一个定义后即刻执行的函数。

为什么我说别再在代码中编写IIFE了?停止本文将给你答案。

可以在JavaScript中定义Block-Scoped 变量

以ES6作为标准发布,时候使用你可以使用let和const声明块级作用域的停止变量和常量。它还引入了独立块,时候使用可以将变量和常量隔离到外部无法使用的停止自身块中。

例如,时候使用可以写:

{ let x = 1;} 

那么x对外不可用。停止

这要比以下代码清晰许多:

(()=>{   let x = 1; })(); 

现如今,时候使用几乎所有浏览器都支持ES6,停止停止使用IIFE能将变量从外部分离。时候使用

另一种隔离变量的停止方法是使用模块,它也得到广泛支持。时候使用只要不将其导出,其他模块就无法使用。

不再需要闭包

闭包是返回另一个函数的函数。返回的函数能够运行在其外部的代码,但内部的代码则由闭包函数运行。

例如,香港云服务器它可能会产生:

const id = (() => {   let count = 0;   return () => {     ++count;     return `id_${count}`;   }; })(); 

而既有了块和模块以隔离数据,上述函数就变得更加复杂和不必要了。

可以将所有函数放入其自身模块,这样就不必担心暴露数据了,但这也会产生副作用。由于不是纯函数,很难对其进行测试。

在可以避免嵌套的时候,返回函数的函数也会引入嵌套,所以它比没有返回函数的函数更易混淆。用模块代替是最好的方法。使用模块可以编写:

let count = 0;export const id =() => {   ++this.count;   return `id_${count}` } 

上面代码中,有相同的count声明且导出了id函数,以供其他模块使用。这像IIFE一样,隐藏了count并暴露出我们想要的函数,但是嵌套较少,不需要定义另一个函数来运行它。

别名变量

同样,写如下内容:

window.$ = function foo() {   // ... };(function($) {   // ... })(jQuery); 

使用模块就可以编写,为何还要仅为给变量创建别名而编写IIFE?利用模块,可以导入不同名称的站群服务器内容。

你可以这样为变量创建别名的编写方式:

import { $ as jQuery } from"jquery";const $ = () => {}; 

此外,不要给窗口对象添加新属性,这会影响全局作用域。

捕捉全局对象

使用globalThis,就不必担心不同作用域中全局对象的名称问题,它正在成为一种标准。无需再使用IIFE以捕获全局对象,你可以在区域顶级编写如下内容:

(function(global) {   // ... })(this); 

甚至即使在“globalThis”之前,编写如下内容设置全局对象也不太难:

const globalObj = self || window|| global; 

或者如果想更精确,可以写:

const getGlobal = () => {   if (typeof self !== undefined) {return self; }   if (typeof window !== undefined) {return window; }   if (typeof global !== undefined) {return global; }   throw new Error(unable to locateglobal object); }; 

不必通过IIFE添加额外函数调用和引入嵌套。

优化压缩

应用JavaScript模块,就不必用IIFE隔离代码,这可以适当地压缩文件。

网络包、浏览、包裹、汇总等(Webpack、Browserify、Parcel、Rollup等程序),都可以正确处理模块,为何不用这些程序来创建更清晰的代码。

在代码中编写IIFE了已经过时了,它还增加了额外的函数定义和嵌套。2020年,请选择使用模块和块来分离代码!

亿华云
  • Tag:

相关文章

  • 超级数据恢复教程(轻松搞定数据丢失问题,数据恢复的救星!)

    摘要:在现代社会中,数据的重要性不言而喻。然而,我们经常会遇到数据丢失的情况,不论是因为误操作、硬盘故障还是病毒攻击,这些都可能导致我们宝贵的数据一去不复返。如何才能够将丢失的数据找回呢...
    2025-11-05
  • 看一遍就理解:MVCC原理详解

    前言MVCC实现原理是一道非常高频的面试题,最近技术讨论群的小伙伴一直在讨论,趁着国庆节有空,我们一起来聊聊。1. 相关数据库知识点回顾1.1 什么是数据库事务,为什么要有事务事务,由一个有限的数据库
    2025-11-05
  • 一篇学会如何使用 Myloader 恢复数据

    前言上篇文章介绍了 mydumper 备份工具的使用方法,文中有提到 mydumper 和 myloader 是一对相互的命令,即 mydumper 负责备份(导出),myloader 负责恢复(导入
    2025-11-05
  • React ,优雅的捕获异常

    前言人无完人,所以代码总会出错,出错并不可怕,关键是怎么处理。我就想问问大家react的应用的错误怎么捕捉呢?这个时候:小白+++:怎么处理? 小白++:ErrorBoundary
    2025-11-05
  • 电脑深度待机唤醒教程(实现高效省电的电脑待机状态)

    摘要:在日常使用电脑的过程中,我们经常会遇到需要暂时离开但不想完全关机的情况。电脑深度待机功能可以让我们在保持电脑打开的同时节省能源,为我们提供了便利。本文将为大家介绍如何设置电脑的深度...
    2025-11-05
  • HarmonyOS实战— ProgressBar进度条组件基本使用

    想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com1. ProgressBar进度条组件组件说明:常见app中,下载进度条,完成任务的进度条
    2025-11-05

最新评论