关于Javascript函数的简单问题,调用/定义的差异

Mat*_*ite 6 javascript

有人可以解释以下功能定义之间的区别吗?

var alertMessage = function alertMessage(message) {
  alert(message);
}

var alertMessage = function(message) {
  alert(message);
}
Run Code Online (Sandbox Code Playgroud)

各自的含义是什么?谢谢!

CMS*_*CMS 2

两者都是函数表达式,基本上的区别是第一个是命名的,第二个是匿名的。

例如:

var test = function test(message) {
  alert(message);
};

var test1 = function(message) {
  alert(message);
};

test.name; // "test"
test1.name // "" or "anonymous"
Run Code Online (Sandbox Code Playgroud)

注意:函数对象的属性name存在于某些实现中,但它是非标准的。

此外,函数表达式的名称对于调试很有用,因为您可以检查调用堆栈以了解您所在的位置。

该标识符只能从其自身内部访问FunctionBody

(function foo(){
  typeof foo; // "function"
})();
typeof foo; // "undefined"
Run Code Online (Sandbox Code Playgroud)

然而,JScript 实现(在 IE 的所有版本中)存在一个错误,该名称被泄漏到其封闭范围。