谁能解释一下原因
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/