Mud*_*rya 2 javascript scope function node.js
谁能解释为什么
function x() {
console.log("Hello!");
}
var a = x;
a();
x();
Run Code Online (Sandbox Code Playgroud)
产生
你好!
你好!
但是这个
var a = function x() {
console.log("Hello!");
}
a();
x();
Run Code Online (Sandbox Code Playgroud)
当你尝试调用函数x时会抛出错误?第二个x函数不被视为提升函数吗?我在nodejs和浏览器中尝试了这个.
你在第二个例子中所拥有的是所谓的命名函数表达式.
它的名称不会添加到包含范围,但可以在函数本身的范围内访问:
var a = function x() {
alert(x);
};
a();
Run Code Online (Sandbox Code Playgroud)
这在编写以其他方式引用自身的递归函数或函数时非常有用,因为它确保名称不会因函数范围之外发生的任何事情而被破坏.
它还允许您在无法使用函数声明的位置创建自引用函数,例如在对象文字中:
var myFavoriteFunctions = {
factorial: function f(n) {
return n === 1 ? 1 : n * f(n);
},
identity: function (v) { return v; }
};
console.log(myFavoriteFunctions.factorial(10));
Run Code Online (Sandbox Code Playgroud)