我正在研究Javascript的执行上下文。但我不明白为什么“函数foo”不会被“var foo”覆盖。 我希望有人可以解释一下, 谢谢你的回应。
function ace(){
console.log(typeof foo); // function pointer
console.log(typeof bar); // undefined
var foo = 'hello',
bar = function() {
return 'world';
};
function foo() {
return 'hello';
}
var foo = 'hello';
}
ACE();
答案 0 :(得分:0)
为什么“函数foo”不会被“var foo”覆盖。
foo
会在重新定义foo
的行中被覆盖
function ace() {
console.log(typeof foo); // function pointer
console.log(typeof bar); // undefined
var foo = 'hello',
bar = function() {
return 'world';
};
function foo() {
return 'hello';
}
var foo = 'hello';
console.log(foo);
try {
foo()
} catch(e) {
console.log("catch:", e.message)
}
}
ace();
答案 1 :(得分:0)
但我不明白为什么"功能foo"不会被" var foo"。
覆盖
var
声明不会覆盖函数声明。它们都声明了相同的变量,并且由于函数声明,它是用函数初始化的。只有赋值才会覆盖该值。
如果您考虑吊装,您的脚本将表现得像
function ace() {
var foo, bar;
var foo = function() {
return 'hello';
}
var foo;
console.log(typeof foo); // function
console.log(typeof bar); // undefined
foo = 'hello';
bar = function() {
return 'world';
};
console.log(typeof foo); // string
foo = 'hello';
}
ace();