繁体   English   中英

在JavaScript中同时声明变量和函数

[英]Simultaneously Declaring Variables and Functions in JavaScript

谁能解释为什么

function x() {
  console.log("Hello!");
}
var a = x;
a();
x();

产生

你好!
你好!

但是这个

var a = function x() {
  console.log("Hello!");
}
a();
x();

尝试调用函数x时引发错误? 第二个x函数不被视为提升函数吗? 我在nodejs和浏览器中都尝试过。

你在第二个例子中所拥有的是所谓的命名函数表达式

它的名称不会添加到包含范围,但可以在函数本身的范围内访问:

var a = function x() {
  alert(x);
};
a();

这在编写以其他方式引用自身的递归函数或函数时非常有用,因为它确保名称不会因函数范围之外发生的任何事情而被破坏。

它还允许您在无法使用函数声明的位置创建自引用函数,例如在对象文字中:

var myFavoriteFunctions = {
    factorial: function f(n) {
        return n === 1 ? 1 : n * f(n);
    },
    identity: function (v) { return v; }
};

console.log(myFavoriteFunctions.factorial(10));

您的第一个示例是一个函数语句,它在其包含范围内声明了一个名称。

您的第二个示例是命名函数表达式,但不是。

有关更多信息,请参阅此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM