scoping和hosting:
问题起因:
function a(){}
var a;
console.log(a);
function b(){}
var b = 1;
console.log(b);
答:同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
(function(){
console.log(typeof a);
console.log(typeof a());
function a(){
return a;
var a = 3;
}
var a = 1;
})();