Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript var NAME=函数名(){};-函数名使用了两次_Javascript_Function - Fatal编程技术网

Javascript var NAME=函数名(){};-函数名使用了两次

Javascript var NAME=函数名(){};-函数名使用了两次,javascript,function,Javascript,Function,在Javascript中,声明函数的一种标准方法如下: var add = function(a,b){ return a+b; }; 但是,当我重复语法右侧的函数名时,也没有出现错误 var add = function add(a,b){ return a+b; }; 第二个案子是怎么回事 在Javascript中,function关键字有两种用法:函数声明和函数表达式。函数声明不允许关键字左边有任何内容,例如 而且它们总是需要一个名称,例如add。同时,您的示例调用其他类型的

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

var add = function(a,b){
   return a+b;
};
但是,当我重复语法右侧的函数名时,也没有出现错误

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

第二个案子是怎么回事

在Javascript中,
function
关键字有两种用法:函数声明和函数表达式。函数声明不允许关键字左边有任何内容,例如

而且它们总是需要一个名称,例如
add
。同时,您的示例调用其他类型的函数表达式,这些表达式不需要名称(但可以命名!),并且始终需要位于其左侧的内容,例如

甚至一个括号:

(function(a,b){
    return a+b;
})(1,2); // 3
现在我们已经记下了一些词汇,第二个例子中的内容,重印了-

var add = function add(a,b){
    return a+b;
};
-是一个函数表达式(即变量赋值到
add
),其函数恰好命名

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

它是专门用来访问函数本身的!根据,

如果要引用函数体中的当前函数,则需要创建一个命名函数表达式该名称仅在函数体(作用域)上局部出现。

让我们重新命名您的
add
s,这样我们就可以更轻松地讨论问题:

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
var-add=1;
函数add(){};

添加()//更多相关信息:很好地解释了你的问题。简单地说,后者是一个命名函数(这可能很有用,例如在堆栈跟踪中,您将看到函数的名称,而不是
匿名函数
)。谢谢!这是非常有用和简洁的。
// 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;
}
var add = 1;
function add() {};

add();     //<-- Error not a function