JavaScript 解释IIFEs
在本文中,您将了解关于JavaScript立即调用的函数表达式(IIFE)。一个 JavaScript立即调用的函数表达式 是一个被定义为表达式并在创建后立即执行的函数。以下是定义立即调用的函数表达式的语法。
语法:
(function(){
// Function Body goes here
})();
立即执行函数(IIFEs)也可以与箭头函数一起使用,如下所示。
(() => {
// Function Body goes here
})()
现在我们了解了什么是立即执行函数表达式(IIFE),让我们来看看一些需要使用IIFE或自执行函数的情况。
IIFE的常见用例
1. 避免全局执行上下文的污染:
立即调用的匿名函数可以用于初始化代码。设置环境所需的变量之后,不再使用这些变量,也不应该混乱命名空间。如果你了解javascript中的执行上下文,你必须意识到全局作用域的概念。存在于全局作用域中的任何变量或函数在整个程序中都可以访问。但有时我们需要确保这些变量只能在程序的特定部分中访问。
例如:假设你正在编写一个库,并且对于功能部分,你要使用易于理解并与所需上下文匹配的变量名。但在库中,你不希望强迫其他开发人员使用不同的名称,只因为你在库代码中使用某些变量名。你希望确保任何现有(或新的)代码不会意外地与其他变量、覆盖函数和方法发生冲突。确保不发生这种意外的方法是将所有的代码包装在IIFE中。这就是为什么很多库都以IIFE风格编写他们的源代码。
例子:
HTML
<script>
let firstVariable = "Hello";
(() => {
// Some initiation code
let secondVariable = "Geeks";
})();
// The secondVariable will
// be discarded after the function is executed
console.log("First Variable:", firstVariable)
console.log("Second Variable:", secondVariable)
</script>
输出:
First Variable: Hello
Uncaught ReferenceError: secondVariable is not defined
2. 将变量设置为私有的:
IIFEs还可以用于为可访问的函数建立私有方法,同时暴露一些属性供以后使用。
例子:
HTML
const User = (() => {
let userName = "Geek";
let userSecret = "Likes using IIFE";
return {
getName: () => userName,
getSecret: () => userSecret
}
})();
console.log(User.getName()); // returns "Geek"
console.log(User.getSecret()); // returns "Likes using IIFE"
console.log(User.userName); // returns undefined
输出: 在上面的例子中,我们可以轻松地访问从函数返回的get方法,但无法访问在函数内定义的任何属性。许多JavaScript库都遵循类似的模式。
Geek
Likes using IIFE
undefined
结论: IIFE(立即执行函数表达式)在常规编码项目中可能不常见,但它是存在的,并在实际世界中有实际用途。您可能会发现自己创建的项目可能会被其他开发人员使用,并且像IIFE这样的概念肯定会派上用场。您也可能会发现一些广泛使用闭包、IIFE、函数柯里化、组合等概念的开源项目。这些概念是函数式编程和javascript的核心,因此了解这些主题肯定会对您学习JavaScript的过程有所帮助。