7、变量提升的处理机制(2)

1、条件判断下的变量提升:
EC(G)全局上下文中的变量提升, 条件中带 function 的在新版本浏览器中只会
提前声明,不会再提前赋值了;
【老版本】:
var a;
func = 函数;
【新版本】:
var a;
func;

if (!('a' in window)) {
     var a = 1;
     function func() {}
}
console.log(a);  // undefined
fn();  // 5

function fn() {
    console.log(1)
}
fn();  // 5

function fn() {
    console.log(2)
}
fn();  // 5

var fn = function() {
    console.log(3)
}
fn();  // 3

function fn() {
    console.log(4)
}
fn();  // 3

function fn() {
    console.log(5)
}
fn()  // 3
var foo = 1

function bar() {
    //  无论条件是否成立,变量都会提前声明 
    if (!foo) {
        var foo = 10
    }
    console.log(foo)  // 10
}
bar()

你可能感兴趣的:(7、变量提升的处理机制(2))