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