什么(function(x,y){...})(a,b); 用JavaScript表示?

use*_*020 7 javascript

我看到了这个功能:

(function (x, y, data, lbl, dot) {
    // Function body...
})(x, y, data[i], labels[i], dot);
Run Code Online (Sandbox Code Playgroud)

这是什么?一个功能?为什么要放置函数定义()

Niv*_*vas 35

在javascript中你可以拥有anonymousself invoking功能.

function add(a, b)
{
   return a + b;
}
Run Code Online (Sandbox Code Playgroud)

和...一样

var add = function (a, b) {
             return a + b;
          }
Run Code Online (Sandbox Code Playgroud)

你称之为

add(10, 20)
Run Code Online (Sandbox Code Playgroud)

您可以定义该函数并立即将其调用为

(
   function(a, b)
   {
      return a + b;
   }
)(10, 20);
Run Code Online (Sandbox Code Playgroud)

   (
       function(a, b)
       {
          return a + b;
       }
    )
Run Code Online (Sandbox Code Playgroud)

part定义一个函数,并(10, 20)在它调用刚刚定义的函数之后立即定义,其中10和20作为参数.

由于该函数没有名称,因此以后不能在代码中使用.

你问题中的代码可能会缩小,并以类似的方式创建一个函数并立即调用它.


Gum*_*mbo 7

function() {}是一个匿名函数的定义(function() {})()是匿名函数的调用.

这是有效的,因为函数可以像数据一样传递.所以window.alert是已知alert函数本身window.alert()会调用该函数.

此技术通常用于保持当前变量范围的清洁,因为函数具有自己的变量范围.

  • +1提及范围作为使用该技术的原因 (2认同)

Dan*_*llo 5

它是一个自我匿名调用函数.该功能立即定义并执行.包装函数的括号确保将其视为函数表达式而不是函数声明.最后一对括号调用函数并传递参数.