在JavaScript中,function() {}()
和()(){}()
都是函数的调用方式,但它们有什么不同呢?本文将深入探讨这两种调用方式的区别以及它们的优势。
什么是function(){}()
?
function(){}()
是一种立即执行函数表达式(Immediately Invoked Function Expression, IIFE),也称为自执行函数。它被定义并立即执行,通常用于创建一个私有的作用域,避免变量污染全局命名空间。例如:
------------ --- - - -- --------------- -- --- ----- --------------- -- ---------
什么是()(){}()
?
()(){}()
也是一种函数调用方式,它将函数包裹在两组括号中,并在最外层再次添加一对括号来调用该函数。这种方式可以用来传递参数,例如:
------------- --------------- -- --- ------
function(){}()
和()(){}()
的区别
虽然这两种方式看起来很相似,但它们之间有一个重要的区别:function(){}()
是一个函数表达式,而()(){}()
实际上是将函数声明转换为函数表达式的一种技巧。在function(){}()
中,函数被包裹在括号中作为一个整体,因此JavaScript将其视为函数表达式。而在()(){}()
中,第一组括号将函数声明转换为了函数表达式,第二组括号用于调用该表达式所代表的函数。
function(){}()
和()(){}()
的优势
1. function(){}()
的优势
使用function(){}()
可以创建私有的作用域,避免变量污染全局命名空间。这种方式特别适合于编写库或插件,它们需要在不同的上下文中运行,并且可能会与其他代码冲突。
例如,在以下示例中,我们可以使用IIFE来定义一个插件:
------------------ -------- --------- -- ------- - ------------------------ - ----------- -- ------ - ------------------------ - ----------- -- ------ - ------------- - ------- -----------
在这个例子中,我们使用IIFE来创建一个私有的作用域来定义Plugin
类。我们将window
对象作为参数传递到IIFE中,以便可以在IIFE内部访问它,并将Plugin
类附加到window
对象上,以便在全局范围内可以使用它。
2. ()(){}()
的优势
使用()(){}()
可以将一个函数声明转换为函数表达式,并立即调用该函数。这种方式特别适合于编写匿名函数,它们可以被立即执行并返回一个值。例如:
--- ------ - ------------ --- ------ - - -- ----- --- -------------------- -- ---
在这个例子中,我们定义了一个匿名函数,并立即将其调用,并传递了两个参数1和2。函数返回它们的和(即3),并将结果分配给变量result
。
结论
function(){}()
和()(){}()
都是函数调用的方式,但它们之间有一些区别。function(){}()
是一种IIFE,用于创建一个私有的作用域,而()(){}()
将
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/11932