功能名称在Javascript中,一个标准的方式来声明函数如下:var NAME = function NAME(){}; - 使用两次
var add = function(a,b){
return a+b;
};
然而,当我重复的语法右边的函数名,我没有得到任何错误,无论是。
var add = function add(a,b){
return a+b;
};
第二种情况是怎么回事?
功能名称在Javascript中,一个标准的方式来声明函数如下:var NAME = function NAME(){}; - 使用两次
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
所以,现在,我们已经有了一些词汇下来,你已经在你的第二个例子中得到的,reprinted-
var add = function add(a,b){
return a+b;
};
-是函数表达式(即,变量赋值为add
),其函数碰巧是,命名为。
现在,这个的目的是什么,命名为函数表达式?
明确是为了访问中的功能本身!根据MDN's documentation,
如果你想引用函数体内的当前函数,你需要创建一个命名函数表达式。 此名称仅限于函数体(范围)。
让我们重命名add
这么我们可以谈论的东西不太容易混淆:
var abc = function xyz(a,b){
return a+b;
};
在上面,abc
将在外部范围访问,而xyz
将不是。同时,反之亦然:abc
将不是可以在内部范围访问,而xyz
将是。
谢谢!这非常有帮助和简洁。 – Michael
此功能
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://stackoverflow.com/questions/10081593/are-named-functions-or-anonymous-functions-preferred-in-javascript – Ankit
[这个答案](HTTP:// stackoverflow.com/a/338053/4962525)很好地解释了你的问题。虚弱下来,后者是一个命名函数(这可能是有用的,例如在堆栈跟踪中,你会看到函数的名称而不是'匿名函数')。 – ROAL