/*
js引擎的执行机制:
(1)预解析(变量声明提升 和 函数声明提升 提升到当前作用域的最前面)
(2)执行代码
*/
// 1.变量提升
// 第一种情况:
console.log(num); // undefine
var num = 10;
// 相当于代码
var num;
console.log(num);
num = 10;
// 第二种情况:
// fun(); // 报错
var fun = function () {
console.log(1);
}
// 相当于代码
var fun;
fun();
fun = function () {
console.log(1);
}
// 2.函数提升
fun1(); // 2
function fun1 () {
console.log(2);
}
// 相当于代码
function fun1 () {
console.log(2);
}
fun1();
/*
思考案列:
*/
// 案例1
var num1 = 10;
function fun2() {
console.log(num1); // undefine
var num1 = 20;
console.log(num1); // 20
}
fun2();
// 相当于代码
var num1;
function fun2() {
var num1;
console.log(num1); // undefine
num1 = 20;
console.log(num1); // 20
}
num1 = 10;
fun2();
// 案例2
ript>
fun3();
console.log(b); // 9
console.log(c); // 9
console.log(a); // 报错
function fun3 () {
var a = b = c = 9; // 相当于 var a = 9; b = 9; c = 9; b 和 c 没有用var声明,被强制为全局变量
console.log(a); // 9
console.log(b); // 9
console.log(c); // 9
}
// 相当于代码
function fun3 () {
var a;
a = 9;
b = 9;
c = 9;
console.log(a); // 9
console.log(b); // 9
console.log(c); // 9
}
fun3();
console.log(b); // 9
console.log(c); // 9
console.log(a); // 报错