有人可以解释以下功能定义之间的区别吗?
var alertMessage = function alertMessage(message) {
alert(message);
}
var alertMessage = function(message) {
alert(message);
}
Run Code Online (Sandbox Code Playgroud)
各自的含义是什么?谢谢!
两者都是函数表达式,基本上的区别是第一个是命名的,第二个是匿名的。
例如:
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 的所有版本中)存在一个错误,该名称被泄漏到其封闭范围。