轉
作用域是針對變數的,比如我們建立了乙個函式,函式裡面又包含了乙個函式,那麼現在就有三個作用域
全域性作用域==>函式1作用域==>函式2作用域
作用域的特點就是,先在自己的變數範圍中查詢,如果找不到,就會沿著作用域往上找。
如:
var a = 1;最後列印出來的是3,因為執行函式c()的時候它在自己的範圍內找到了變數a所以就不會越上繼續查詢,如果在函式c()中沒有找到則會繼續向上找,一直會找到全域性變數a,這個查詢的過程就叫作用域鏈。function b()
c();
}b();
不知道你有沒有疑問,函式c為什麼可以在函式b中查詢變數a,因為函式c是在函式b中建立的,也就是說函式c的作用域包括了函式b的作用域,當然也包括了全域性作用域,但是函式b不能向函式c中查詢變數,因為作用域只會向上查詢。
那麼什麼是原型鏈呢?
原型鏈是針對建構函式的,比如我先建立了乙個函式,然後通過乙個變數new了這個函式,那麼這個被new出來的函式就會繼承建立出來的那個函式的屬性,然後如果我訪問new出來的這個函式的某個屬性,但是我並沒有在這個new出來的函式中定義這個變數,那麼它就會往上(向建立出它的函式中)查詢,這個查詢的過程就叫做原型鏈。
object ==> 建構函式1 ==> 建構函式2
就和css中的繼承一樣,如果自身沒有定義就會繼承父元素的樣式。
function a(){};a.prototype.name = "追夢子";
var b = new a();
console.log(b.name); //追夢子
作用域鏈與原型鏈
1 什麼是作用域鏈 當 在乙個環境中執行時,會建立變數物件的乙個作用域鏈。由子級作用域返回父級作用域中尋找變數,就叫做作用域鏈。作用域鏈中的下乙個變數物件來自包含環境,也叫外部環境。而再下乙個變數物件則來自下乙個包含環境,一直延續到全域性執行環境。全域性執行環境的變數物件始終都是作用域鏈中的最後乙個...
理解js作用域鏈 原型鏈
關於global object global object 其實就是 變數物件。當js編譯器開始執行的時候,會初始化乙個global object 來關聯全域性的作用。對於全域性作用域而言,global object j就是variable object.在瀏覽器端 被具象成為window 物件。也...
js高階 作用域與作用域鏈
理解 就是一塊地段,乙個 段所在的區域。它是靜態的 相對於上下文物件 在編寫 時就確定了。分類 全域性作用域 函式作用域 塊作用域 es6 作用 隔離變數,不同作用域下的同名變數不會有衝突。var a 10,b 20 function fn x bar 100 bar 200 fn 10 結果 區別...