js在执行代码会先预解析在执行代码
预解析:js引擎会把js里面所有的var声明和函数声明当前作用域的最前面,然后按照代码顺序从上往下执行
对var,不提升赋值操作,只提升【定义,声明】
对function,不提升函数体,只提升【函数声明】
!!!函数声明提升高于变量声明提示
var a = 10;
function a() { }
console.log(a);
//输出10
//----预解析后----
function a() { };
var a;
a = 10;
console.log(a);
声明了一个重复且未被赋值的变量会被忽略
console.log(a);
var a = 10;
function a() { }
//输出ƒ a() { }
//----预解析后-----
function a() { };
var a;//声明了一个重复且未被赋值的变量会被忽略
console.log(a);
a = 10;
f1()
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
//输出 9 9 9 9 9 a is not defined
//预解析后
function f1() {
var a ;
a = b = c = 9;//b和c直接赋值没有声明当全局变量看
console.log(a);
console.log(b);
console.log(c);
}
f1()
console.log(c);
console.log(b);
console.log(a);