作用域鏈與原型鏈

2021-10-02 19:14:52 字數 1210 閱讀 5698

1、什麼是作用域鏈

當**在乙個環境中執行時,會建立變數物件的乙個作用域鏈。

由子級作用域返回父級作用域中尋找變數,就叫做作用域鏈。

作用域鏈中的下乙個變數物件來自包含環境,也叫外部環境。而再下乙個變數物件則來自下乙個包含環境,一直延續到全域性執行環境。全域性執行環境的變數物件始終都是作用域鏈中的最後乙個物件。

作用域鏈前端始終都是當前執行的**所在環境的變數物件,如果環境是函式,則將其活動物件作為變數物件。

2、作用域鏈的用途

是保證執行環境有權訪問的所有變數和函式的有序訪問。

3、怎麼延長作用域鏈

執行環境的型別只有兩種,全域性和區域性(函式)。但是有些語句可以在作用域鏈的前端臨時增加乙個變數物件,該變數物件會在**執行後被移除。

具體來說就是執行這兩個語句時,作用域鏈都會得到加強。

1、什麼是原型鏈

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

2、原型鏈的用途

主要是繼承的作用,簡單來說,繼承,就是子類繼承父類的方法和變數;原型上可以定義一些方法和變數;以這個原型建立的物件,可以使用原型方法和變數,從而實現繼承。

作用域是對於變數而言,原型鏈是對於物件的屬性。

作用域鏈頂層是window,原型鏈頂層是object。

作用域是針對變數的,比如我們建立了乙個函式a,函式a裡面又包含了乙個函式b,那麼現在就有三個作用域:全域性作用域==>函式a作用域==>函式b作用域,作用域的特點就是,先在自己的變數範圍中查詢,如果找不到,就會沿著作用域往上找。

原型鏈是針對建構函式的,比如我先建立了乙個函式,然後通過乙個變數new了這個函式,那麼這個被new出來的物件就會繼承建立出來的那個函式的屬性,然後如果我訪問new出來的這個物件的某個屬性,但是我並沒有在這個new出來的物件中定義這個變數,那麼它就會往上(向建立出它的函式中)查詢,這個查詢的過程就叫做原型鏈。

object ==> 建構函式1 ==> 建構函式2

JS 作用域鏈與原型鏈

轉 作用域是針對變數的,比如我們建立了乙個函式,函式裡面又包含了乙個函式,那麼現在就有三個作用域 全域性作用域 函式1作用域 函式2作用域 作用域的特點就是,先在自己的變數範圍中查詢,如果找不到,就會沿著作用域往上找。如 var a 1 function b c b 最後列印出來的是3,因為執行函式...

理解js作用域鏈 原型鏈

關於global object global object 其實就是 變數物件。當js編譯器開始執行的時候,會初始化乙個global object 來關聯全域性的作用。對於全域性作用域而言,global object j就是variable object.在瀏覽器端 被具象成為window 物件。也...

作用域鏈和原型鏈的理解

作用域鏈 函式執行會形成乙個私有的作用域,形參和在當前私有作用域中宣告的變數都是私有變數,當前的私有作用域有自我保護機制,私有變數中遇到乙個非私有的變數,則向它的上級作用域找,如果還不是上級作用域私有的,則繼續向上查詢,一直找到window為止。這種變數一層層向上查詢的機制 作用域鏈機制。原型鏈 例...