JS預決議學習筆記
最近在學習JavaScript的預決議內容將筆記分享給大家文章目錄
- JS預決議學習筆記
- 前言
- 一、預決議?
- 二、案例:
- 案例1
- 案例2
- 總結
前言
JavaScript代碼是由瀏覽器中的JavaScript決議器來執行的,JavaScript決議器在運行JavaScript代碼的時候分為兩步:預決議和代碼執行,(1).預決議:JS引擎會把JS里面所有的 var關鍵字 還有function函式提升到當前作用域的最前面
(2).代碼執行:按照代碼書寫順序從上往下執行
一、預決議?
預決議分為 變數預決議(變數提升) 和 函式預決議(函式提升)(1).變數提升:就是把所有的變數宣告提升到當前作用域的最前面 不提升賦值操作
(2).函式提升:就是把所有的函式宣告提升到當前作用域的最前面 不呼叫函式
二、案例:
案例1
(1)初始代碼如下:
var num = 10;
fun1();
function fun1() {
console.log(num);
var num = 20;
}
(2)運行時的代碼:
// 變數函式都提升
var num;
function fun1() {
var num;
// 就近原則上面只有num,依次羅列所以這是undefined
console.log(num);
num = 20;
}
num = 10;
fun();
(3)運行結果如下:

(4)分析:
???我們知道JavaScript決議器在運行JavaScript代碼的時候,JS引擎會把JS里面所有的 var關鍵字 還有function函式提升到當前作用域的最前面這里又有var關鍵字又有function函式所以首先將變數提升到前面(注意提升是不賦值的),然后再將函式提升到前面(注意提升是不呼叫的),函式里面也有var關鍵字所以需要提升到前面,再照著原來的代碼順序num = 10,fun()這樣寫下來就是上面運行時的代碼,
案例2
(1)初始代碼如下:
getnum();
console.log(y);
console.log(z);
console.log(x);
function getnum() {
var x = y = z = 6;
console.log(x);
console.log(y);
console.log(z);
}
(2)相當于以下代碼:
//函式提升
function getnum() {
// var x = y = z = 6;
// 這里的變數宣告相當于var x = 6; y=6; z=6; y和z是全域變數所以變數提升是將x提升就好
//變數提升
var x = 6;
x = y = z = 6;
console.log(x);
console.log(y);
console.log(z);
}
getnum();
// 如果將控制臺x寫在第一行,就只會顯示3行6然后1行報錯影響下面y和z的繼續輸出,由于x是函式里的區域變數就會報錯顯示未定義(x is not defined)
// 寫在最后一行前面的y和z就可以輸出不會被影響
console.log(y);
console.log(z);
console.log(x);
(3)運行結果如下:

(4)分析:
???JS運行代碼的時候首先在整個代碼的主體部分找var關鍵字發現沒有,然后發現有getnum()函式于是將其提升到前面,其他的代碼按照順序來依次執行,而getnum()函式里面也有一個var關鍵字區域變數的提升就是x變數,y和z是全域變數沒關鍵字定義不會提升上去,然而由于x是區域變數也就使得接下來在函式外部控制臺輸出x的時候會顯示未定義,
總結
以上就是今天要跟大家分享的JS預決議的內容寫得不好還請多多包涵,轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/240067.html
標籤:其他
上一篇:CMS內容管理系統
下一篇:實作圖片懶加載簡單的方法
