1. 程式人生 > >原型鏈和作用域鏈

原型鏈和作用域鏈

1,作用域:是針對變數的,特點是先在自己的變數範圍中查詢,若找不到,會逐級向上找。

比如我們建立了一個函式,函式裡面又包含了一個函式,那麼現在就有三個作用域
  全域性作用域==>函式1作用域==>函式2作用域
var a = 1;
function b(){
    var a = 2;
    function c(){
        var a = 3;
        console.log(a);
    }
    c();
}
b();
//最後打印出來的是3,因為執行函式c()的時候它在自己的範圍內找到了變數a所以就不會越上繼續查詢,如果在函式c()中沒有找到則會繼續向上找,一直會找到全域性變數a,這個查詢的過程就叫作用域鏈。

2,原型鏈:是針對建構函式的,特點是現在自己的範圍之內查詢

比如我先建立了一個函式,然後通過一個變數new了這個函式,那麼這個被new出來的函式就會繼承創建出來的那個函式的屬性,然後如果我訪問new出來的這個函式的某個屬性,但是我並沒有在這個new出來的函式中定義這個變數,那麼它就會往上(向創建出它的函式中)查詢,這個查詢的過程就叫做原型鏈。
 Object ==> 建構函式1 ==> 建構函式2
 function a(){};
a.prototype.name = "全世界最好的黃景瑜";
var b = new a();
console.log(b.name); //全世界最好的黃景瑜