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

标签 javascript node.js function scope

谁能解释一下原因

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

产生

您好!
您好!

但是这个

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

当您尝试调用函数 x 时抛出错误?第二个 x 函数不被认为是提升函数吗?我在 nodejs 和浏览器中都试过了。

最佳答案

第二个示例中的内容称为 named function expression .

它的名字没有添加到包含作用域中,但在函数本身的作用域内是可访问的:

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));

关于javascript - 在 JavaScript 中同时声明变量和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711227/

相关文章:

javascript - 庆典 : nodemon command not found windows 10

javascript - 在应用程序之间共享数据库,无需在 Sequelize 中复制模型

在对象数组上使用函数变量时的 Javascript 'undefined'

php - 如何在 WordPress 中将图像添加到自定义主题本身?

javascript - Go 与 JavaScript JSON 解析

python - 函数内的函数次数未知

javascript - 在 IE 中需要双击打开下拉菜单,在 Chrome 中工作正常

javascript - 选择同一类中的 div

javascript - 尝试使用正文解析器从 Express v4 中的 POST 请求解析 JSON 对象

javascript - 我的 jQuery 函数互相破坏