作用域是針對變數的,比如我們建立了乙個函式a,函式a裡面又包含了乙個函式b,那麼現在就有三個作用域:
全域性作用域==>函式a作用域==>函式b作用域
作用域的特點就是,先在自己的變數範圍中查詢,如果找不到,就會沿著作用域往上找。
如:
var num = 1;
function a()
b();
}a();
最後列印出來的結果是3,因為執行函式b()的時候它在自己的範圍內找到了變數num所以就不會往上繼續查詢,如果在函式b()中沒有找到則會繼續向上找,一直會找到全域性變數num,這個查詢的過程就叫作用域鏈。
函式b為什麼可以在函式a中查詢變數num,因為函式b是在函式a中建立的,也就是說函式b的作用域包括了函式a的作用域,當然也包括全域性作用域,但是函式a不能向函式b中查詢變數,因為作用域只會向上查詢。原型鏈是針對建構函式的,比如我先建立了乙個函式,然後通過乙個變數new了這個函式,那麼這個被new出來的物件就會繼承建立出來的那個函式的屬性,然後如果我訪問new出來的這個物件的某個屬性,但是我並沒有在這個new出來的物件中定義這個變數,那麼它就會往上(向建立出它的函式中)查詢,這個查詢的過程就叫做原型鏈。
object ==> 建構函式1 ==> 建構函式2
類似於css中的繼承,如果自身沒有定義就會繼承父元素的樣式。
function person(){};
person.prototype.name = "追夢子";
var person1 = new person();
console.log(person1.name); //追夢子
作用域鏈和原型鏈的理解
作用域鏈 函式執行會形成乙個私有的作用域,形參和在當前私有作用域中宣告的變數都是私有變數,當前的私有作用域有自我保護機制,私有變數中遇到乙個非私有的變數,則向它的上級作用域找,如果還不是上級作用域私有的,則繼續向上查詢,一直找到window為止。這種變數一層層向上查詢的機制 作用域鏈機制。原型鏈 例...
作用域鏈與原型鏈
1 什麼是作用域鏈 當 在乙個環境中執行時,會建立變數物件的乙個作用域鏈。由子級作用域返回父級作用域中尋找變數,就叫做作用域鏈。作用域鏈中的下乙個變數物件來自包含環境,也叫外部環境。而再下乙個變數物件則來自下乙個包含環境,一直延續到全域性執行環境。全域性執行環境的變數物件始終都是作用域鏈中的最後乙個...
理解作用域鏈和原型鏈
作用域鏈的概念 要理解es中作用域鏈,首先要從理解執行環境開始。es中 執行都是在乙個具體的執行環境中進行的,每個執行環境有乙個與之關聯的變數物件,該變數中包含著在這個執行環境中可以訪問的變數和函式。這裡所說的執行環境就相當於作用域。最外圍的執行環境是全域性環境,在web瀏覽器中也就是window物...