在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);
所以现在我们已经掌握了一些词汇,在你的第二个例子中重复打印出来的内容是——
var add = function add(a,b){
return a+b;
};
—是一个函数
表达式(即变量赋值到
add
中),其函数恰好被
命名。
现在,这个
命名函数表达式的目的是什么?
它专门用于访问函数
内部!根据
MDN文档,
如果您想在函数体内引用当前函数,则需要创建一个命名函数表达式。然后该名称仅局限于函数体(作用域)中。
让我们重新命名您的
add
,以便我们可以更清晰地讨论事情:
var abc = function xyz(a,b){
return a+b;
};
在上面的例子中,
abc
将在外部作用域中可访问,而
xyz
则不会。与此同时,反过来:
abc
将无法在内部作用域中访问,而
xyz
将可访问。