Javascript var NAME=函数名(){};-函数名使用了两次
在Javascript中,声明函数的一种标准方法如下: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。同时,您的示例调用其他类型的
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