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

2022-10-09 05:36:08 字數 2156 閱讀 9252

顯示原型prototype

隱式原型[[prototype]](__proto__已被棄用,現在用[[prototype]]代替)

當訪問乙個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的[[prototype]]隱式原型上查詢,即它的建構函式的prototype,如果還沒有找到就會再在建構函式的prototype的[[prototype]]中查詢,這樣一層一層向上查詢就會形成乙個鏈式結構,我們稱為原型鏈。

注意:__proto__已被[[prototype]]代替,[[prototype]]通過object.getprototypeof(例項物件)獲取

例項物件.__proto__===object.getprototypeof(例項物件)
建構函式的顯示原型(prototype)等於例項物件的隱式原型([[prototype]])

建構函式.prototype===例項物件.__proto__
所有建構函式都是function的例項,包括function自身,

建構函式.__proto__===function.prototype
所有顯式原型都是object的例項,包括object自身

prototype.__proto__===object.prototype
function因為是自身的例項,因此function既可以通過prototype訪問自身的原型物件,也可以通過__proto__訪問自身的原型物件

function.__proto__===function.prototype

function.__proto__.__proto__===function.prototype.__proto__

object的原型物件的__proto__指向null(原型鏈的終點)

因為如果object.prototype===object.prototype.__proto__(所有原型物件都是object的例項)原型鏈最終將一直訪問object.prototype沒有盡頭,因此設定object.prototype.__proto__===null

object.prototype.__proto__===null
函式的宣告和變數的宣告都會提公升到其所在作用域最頂端(函式體內提公升到函式體最頂部,全域性提公升到全域性最頂部)

函式首先被提公升,然後才是變數。(函式是一等公民,優先編譯)

函式提公升優先順序比變數提公升要高,且不會被變數宣告覆蓋,但是會被變數賦值覆蓋。

注意:函式表示式宣告時,只有前面的變數會發生宣告提公升,後面的函式並不會發生宣告提公升

典型例子:

console.log(foo);

foo();

var foo = "變數";

function foo()

console.log(foo);

}console.log(foo);

**預解析為:

function foo()

console.log(foo)

}var foo;

foo(); //控制台列印undefiend

console.log(foo); //foo函式體

foo = "變數";

console.log(foo); //變數

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

程式在執行過程中,會先將 讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤 變數的宣告 變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應 函式的宣告 函式的宣告分為函式名和函式體兩部分 函式名的宣告與變數的宣告...

function 函式宣告頭的提公升和預解析

即function語句的集合,就是將多個語句封裝到一起 函式的執行要會自己遍歷,遇見函式 a 執行語句,就要移交控制權,函式執行完畢之後,控制權又移交回來了!函式的引數要羅列在function定義的圓括號內sum a,b 用逗號隔開,叫做形式引數,呼叫的時候,圓括號裡面是實際引數sum 1,2 引數...

預解析和變數提公升

doctype html en utf 8 viewport content width device width,initial scale 1.0 document title head var f functionf console.log f f 123 var fn 123 functio...