<分区>
我对这个概念的理解是,iifes 允许您模拟一个“私有(private)”范围,从而防止全局范围变得困惑。
既然 ECMAScript 6 已经得到了相当广泛的实现,并且让我们可以通过 const 和 let 访问 block 级范围,那么还有其他理由使用 iife 模式吗? (除了需要提供向后兼容性..)
<分区>
我对这个概念的理解是,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 - 为什么我的 Mongoose 数组没有被填充,甚至没有存储值?
javascript - 巴别塔 : turn off import directives transpilation
ecmascript-6 - 使用 map 和箭头功能将 2 个列表合二为一
javascript - 移动网络应用程序可以在后台运行吗? (iOS & 安卓)
javascript - 为什么 fetch 会返回 "TypeError: Failed to fetch"而不仅仅是 "Failed to fetch"?