console.log(num); var num = 10; // 相当于执行 var num; console.log(num);//undefined num = 10;
例如:
var num = 10; fun(); function fun() { console.log(num); var num = 20; } // 相当于执行 var num; function fun() { var num; console.log(num); num = 20; } num = 10; fun(); //结果是 undefined
案例1:
var a = 25; function abc() { alert(a); //结果是 undefined var a = 10; } abc();
预解析结果:
var a; // 在全局作用域里提升变量 function abc() { // 在全局作用域里提升函数 var a; // 在局部作用域里提升变量 alert(a); // a 的值是 undefined a = 10; // 在局部作用域里给变量赋值 } a = 25; // 给变量赋值 abc(); // 调用函数
案例2:
console.log(a); function a() { console.log('aaaaa'); } var a = 1; console.log(a);
预解析结果:( 在预解析的过程中如果函数和变量的名字相同,此时函数优先 )
var a; //全局作用域里提升变量 function a() { //全局作用域里提升函数 console.log('aaaa'); } console.log(a); // 输出函数 a 在预解析的过程中如果函数和变量的名字相同,此时函数优先 a = 1; // 给变量赋值 console.log(a); // 输出变量 a
案例3:
var a = 18; f1(); function f1() { var b = 9; console.log(a); console.log(b); var a = '123'; }
预解析结果:
var a; // 全局作用域中提升变量 function f1() { // 全局作用域中提升函数 var b; // 局部作用域中提升变量 var a; // 局部作用域中提升变量 b = 9; // 局部作用域中给变量赋值 console.log(a); // a 的值为 undefined console.log(b); // b 的值为 9 a = '123'; // 局部作用域中给变量赋值 } a = 18; // 全局作用域中给变量赋值 f1(); // 调用函数