JS高階系列 預解析和宣告提公升

2021-08-15 23:28:33 字數 1541 閱讀 5166

程式在執行過程中,會先將**讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤

變數的宣告

變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應

函式的宣告

函式的宣告分為函式名和函式體兩部分

函式名的宣告與變數的宣告方式一致

函式體宣告即告訴js直譯器這個名字對應的函式體是什麼

函式宣告與函式表示式的區別:函式宣告是單獨寫在乙個結構中,不存在任何語句結構中

舉個栗子

函式宣告

f();    //執行不會報錯

functionf()

//對應的預解析過程

var f; //函式名宣告 此時f=undefined

函式體宣告 //此時f存放該函式體的位址

函式表示式

f();    //執行會報錯:f is not a function

if(true)

}//對應的預解析過程

var f; //函式名宣告 此時f=undefined

if(true) //函式表示式賦值 此時f存放該函式體的位址

}

**1分析

var num = 1;

function

num()

num();

//對應的預解析過程

var num; //此時num=undefined

//第二步:函式宣告 此時num指向函式體的記憶體空間

num = 1; //此時num=1 函式體無人引用

num(); //報錯: num is not a function

**2分析

var num = 123;

functionf()

//對應的預解析過程

var f;

var num;

//函式體宣告

num = 123;

//f函式體內對應的預解析過程

function

f()

**3分析

if(!'a'

inwindow)

console.log(a);

//對應的預解析過程

var a;

//'a'

inwindow 為 true

if(false)

console.log(a); //

undefined

**4分析

if(true)

} else

}f();

//對應的預解析過程

var f;

if(true)

} else

}f(); //true

JS函式和宣告提公升

目錄語法 function 函式名 形參1,形參2,匿名函式 var f1 function 形參1,形參2,f1 1,2 立即執行函式 function a,b 1,2 在函式體內通過arguments物件來訪問引數陣列,從而獲取傳給函式的每個引數。可以通過索引取到引數。function add ...

原型鏈與宣告提公升 預解析

顯示原型prototype 隱式原型 prototype proto 已被棄用,現在用 prototype 代替 當訪問乙個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的 prototype 隱式原型上查詢,即它的建構函式的prototype,如果還沒有找到就會再在建構函式...

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...