JavaScript中(function() { } )() 是什么?
JavaScript 的(function() { } )()结构初看起来可能令人困惑,但对于编写即时执行且自成一体的代码块来说,它却是一个非常有用的工具。
虽然 (function() { } )() 看起来像是大括号和小括号的奇怪组合,但它在 JavaScript 中却有特定的功能。
JavaScript 中的构造(function() { })()称为立即调用函数表达式 (IIFE)。它是一种同时定义和执行函数的方法。使用 IIFE 的主要目的是为变量创建新的作用域,防止它们污染全局作用域。
通过将代码封装在 IIFE 中,可以避免污染全局命名空间,并在需要时准确运行代码。通过使用 IIFE,我们可以编写更有条理、更模块化的 JavaScript 代码。
(function() { |
说明:
(function() { } )()
该表达式是立即调用的函数表达式。它包括两个部分,注意有两对括号:
- 函数声明:(function() {})定义了一个匿名函数,这第一组括号中的 function() { } 是匿名函数表达式,用()括号将 function() {}括起来,就是将一个表达式括起来,表示局部作用域,局限在这对括号的上下文 限制里, function() {}涉及的任何变量都被限制在当前这对括号上下文,不会进入全局作用域上下文场景中,避免全局变量名冲突。
- () 会立即调用函数:函数表达式由最后一对括号()表示立即调用或调用,这对括号在第一组括号之外。
此模式的变体,例如将参数传递给 IIFE:
(function(x, y) { |
在这种情况下,5和7作为参数传递给 IIFE,并且该函数将立即使用这些值执行。
作用域限制
(function () { |
该表达式创建了一个局部作用域,防止计数器变量counter 污染全局作用域。这种封装是有益的,尤其是在避免全局变量冲突至关重要的大型应用程序中。
又一个示例
let Module = (function () { |
在这里,IIFE 被用来创建一个具有私有和公有成员的模块。私有成员(privateVariable 和 privateFunction)封装在 IIFE 中,模块外部无法访问。返回的对象只包含公共成员。
总之
IIFE用来实现封装、内聚以及划定上下文边界都有很大作用。