javascript - JavaScript iifes(立即调用的函数表达式)是否仍然相关?

标签 javascript ecmascript-6

<分区>

我对这个概念的理解是,iifes 允许您模拟一个“私有(private)”范围,从而防止全局范围变得困惑。

既然 ECMAScript 6 已经得到了相当广泛的实现,并且让我们可以通过 const 和 let 访问 block 级范围,那么还有其他理由使用 iife 模式吗? (除了需要提供向后兼容性..)

最佳答案

普通 block 无法实现的 IIFE 的一个好处是能够将其输出分配给 const。例如:

const output = (() => {
  // some calculations that take a few lines
  const now = new Date();
  return now.getMinutes() + ':' + now.getSeconds();
})();
console.log(output);

假设我们想在 IIFE 中包含 now 变量,因为它只与计算 output 相关,其他任何地方都不需要。如果为此目的使用普通 block ,则只有在 output 声明为 let 而不是 const 时才有可能:

let output;
{
  // some calculations that take a few lines
  const now = new Date();
  output = now.getMinutes() + ':' + now.getSeconds();
}
console.log(output);

因为 const 显着提高了代码的可读性(在我看来),这可以说是更喜欢 IIFE 而不是普通 block 的潜在原因,当然代码风格不同。

就是说,如果要extract till you drop ,有些人可能会说要避免 IIFE 并声明一个独立的函数,然后可以导入和调用它:

function getTimeStr() {
  const now = new Date();
  return now.getMinutes() + ':' + now.getSeconds();
}

// another file:
// import getTimeStr from './getTimeStr';
const output = getTimeStr();
console.log(output);

在上面的代码片段中,与 ES6 使用普通 block 的能力相比,使用 Webpack(或者,也许是 ES6 模块)等现代代码 bundler 可能对减少 IIFE 的使用产生更大的影响。这取决于人们喜欢的编码风格,但使用 IIFE 肯定是一个可能的选择。

关于javascript - JavaScript iifes(立即调用的函数表达式)是否仍然相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996330/

相关文章:

javascript - 如何轻松获取换行符分隔单词的文本文件并创建 JavaScript 数组?

javascript - 谷歌翻译覆盖选择更改事件

javascript - 为什么我的 Mongoose 数组没有被填充,甚至没有存储值?

javascript - 巴别塔 : turn off import directives transpilation

ecmascript-6 - 使用 map 和箭头功能将 2 个列表合二为一

javascript - 移动网络应用程序可以在后台运行吗? (iOS & 安卓)

javascript - 为什么 fetch 会返回 "TypeError: Failed to fetch"而不仅仅是 "Failed to fetch"?

javascript es6 双箭头函数

javascript - 在 ES6 Promise 中,我应该在解析/拒绝之前使用 return 吗?

javascript - 满足条件的过滤数组