var NAME = function NAME(){};

在Javascript中,声明函数的一种标准方式如下所示:

var add = function(a,b){
   return a+b;
};

但是,当我重复语法右侧的函数名称时,我也没有得到任何错误。

var add = function add(a,b){
  return a+b;
};

第二种情况发生了什么?


在Javascript中有两个用于使用关键字的function :函数声明和函数表达式。 函数声明不允许关键字左侧的任何内容,例如

function add(a,b){
    return a+b;
}

他们总是需要一个名字,例如add 。 同时,您的示例调用其他类型的函数表达式,它们不需要名称(但可以命名!),并且总是需要左边的东西,例如您的

var add = function(a,b){
    return a+b;
};

甚至是一个括号:

(function(a,b){
    return a+b;
})(1,2); // 3

所以,现在我们已经掌握了一些词汇,你在第二个例子中得到了什么,

var add = function add(a,b){
    return a+b;
};

- 是函数恰好被命名的函数表达式(即变量赋值为add )。

现在,这个命名函数表达式的目的是什么?

它明确地用于访问其内部的功能! 根据MDN的文件,

如果你想引用函数体内的当前函数,你需要创建一个命名函数表达式。 这个名称仅限于函数体(scope)。

让我们重新命名您的add这样我们就可以更轻松地谈论事物:

var abc = function xyz(a,b){
    return a+b;
};

在上面, abc可以在外部范围访问,而xyz不会。 同时,反之亦然: abc在内部范围内不可访问,而xyz将会是。


这个功能

var add = function add(a,b){
  return a+b;
};

可以粗略地解释为

// the scope of outer `add` is here
var add = function (a, b) {
   var add = ...self... // something like that. the scope of this `add` is here

   return a + b;
}

在这两种情况下,您最终都会拥有一个名为add()的函数。

但是在这种背景下,以下行为很有趣。

var add = 1;
function add() {};

add();     //<-- Error not a function
链接地址: http://www.djcxy.com/p/96289.html

上一篇: var NAME = function NAME (){ };

下一篇: What is the difference between these two?