<
!doctype html>
"utf-8"
>
js預解析<
/title>
// //情況一
// 報錯,num未定義
// //情況二(坑1)
// console.log(num);//undefined
// var num = 10;
//由於**執行是先解析再執行**
//所以上面的**等價於
// var num;
// console.log(num);
// num = 10;
//由於num在定義時並初始化所以會undefined
// //情況三
// // fn();
// // function fn()//用了自定義函式,即函式關鍵字,所以函式的呼叫用在前後都可以
// //fn();
// 之所以將fn()呼叫放到前面和後面都可以是因為預解析是,
// 將函式調公升到當前函式作用域的最前面,所以與解析式都會先執行fn()函式,並不會呼叫函式
// //情況四(坑2)
// //用函式表示式生明函式
// fun();//出錯,缺少物件
// var fun = function()//fun是變數名
// console.log(22);
// }
// //fun();可以執行
//上面**執行順序相當於
// var fun;//生明函式未給值
// fun();//呼叫未給值的函式一定會報錯
// fun = function()
//函式表示式呼叫必須寫在函式表示式的下面
// 1.js引擎執行js可以分為量兩步:預解析,**執行,
// (1)預解析 js引擎會把js裡面的var 還有function提公升到當前作用域的最前面
// (2)**執行 單招**書寫的順序從上往下執行
// 2.預解析分為 變數預解析(變數提公升)和函式與解析(函式提公升)
// (1)變數提公升 就是把所有的變數提公升到當前的作用域的最前面 不提公升賦值操作
//(2)函式提公升 就是把所有的函式宣告提公升到當前作用域的最前面 不呼叫函式
//案例1:結果是幾
// var num = 10;
// fun();
// function fun()
//相當於執行以下**過程
// var num;
// // 函式沒呼叫,不執行,當執行完fun()之後再執行
// function fun()
// // 先不執行
// num = 10;
// fun();//呼叫函式
//案例2:結果是幾
// var num = 10;
// function fn()
// fn();
// //以上**的執行過程相當於
// var num;
// function fn()
// num = 10;
// fn();
//案例3:
// var a = 10;
// f1();
// function f1()
// 以上**的執行過程為
// var a;
// function f1()
// a = 10;
// f1();
案例4:f1
(); console.
log(c)
; console.
log(b)
; console.
log(a)
;functionf1(
)//以上**執行過程相當於
functionf1(
)f1()
;//之後是全域性變數的輸出,由於a為區域性變數,相當於未被定義過故會報錯
console.
log(c)
;//9
console.
log(b)
;//9
console.
log(a)
;//報錯
<
/script>
<
/head>
<
/body>
<
/html>
JS高階之預解析
提前賦值 預解析結束後,在逐行解讀 console.log a var a 1 解析過程 var a console.log a a 1 console.log b var b 123 functionb 解析過程 var b 函式,在正式執行 前,賦值為整個函式塊 functionb consol...
js學習 一 預解析
js學習 一 預解析 1.js引擎執行js分為兩步 預解析 執行 1 預解析 js引擎將js裡面所有的var和function提公升到當前作用域的最前面 2 執行 按照 書寫的順序從上往下執行 2.預解析分為 變數預解析和函式預解析 1 變數預解析 把所有的變數宣告提公升到當前作用域最前面 不提公升...
JS學習之預解析(執行上下文)
預解析 在一段js 拿過來真正一句一句執行之前,瀏覽器會做一些 準備工作 就是執行上下文 預解析 函式或者變數都會有提前解析的過程,js會把函式或者變數提前解析一下,解析到它們對應的作用域最開始的地方 步驟 1 先找var,function關鍵字以及引數 2 如果找到了var 宣告的變數 引數 會給...