在JavaScript中,什么是优势?!function() { }()(){ }在函数()()?

在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