JavaScript 預解析 1.預解析 js引擎運行js代碼,分為兩步:預解析、代碼執行 1.預解析:js引擎會把js裡面所有的var還有function提升到當前作用域的最前面 2.代碼執行:按照代碼書寫的順序從上往下執行 2.變數預解析(變數提升)和函數預解析(函數提升) 1.變數提升:就是把 ...
JavaScript 預解析
1.預解析
js引擎運行js代碼,分為兩步:預解析、代碼執行
1.預解析:js引擎會把js裡面所有的var還有function提升到當前作用域的最前面
2.代碼執行:按照代碼書寫的順序從上往下執行
2.變數預解析(變數提升)和函數預解析(函數提升)
1.變數提升:就是把所有的變數聲明提升到當前的作用域最前面,不提升賦值操作
2.函數提升:就是把所有的函數聲明提升到當前作用域的最前面,不調用函數
3.案例分析
//問題1
console.log(num);
//問題2
console.log(num); // nudefined 坑1
var num = 10;
//相當於執行了以下代碼:
var num;
console.log(num);
num = 10;
//問題3
fn();
function fn(){
console.log(11);
}
//問題4
fun(); // 報錯 坑2
var fun = function(){
console.log(22);
}
//函數表達式調用必須寫在函數表達式的下麵
//相當於執行了以下代碼:
var fun;
fun();
fun = function(){
console.log(22);
}
//案例
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);
}
//相當執行了以下代碼:
function f1(){
var a = b = c = 9;
//相當於 var a = 9; b = 9; c = 9; b和c直接賦值,沒有var聲明,當全局變數看
//集體聲明:var a = 9, b = 9, c = 9;
console.log(a); // 結果是 9
console.log(b);// 結果是 9
console.log(c);// 結果是 9
}
f1();
console.log(c);// 結果是 9
console.log(b);// 結果是 9
console.log(a);// 結果是 undefined