什麼是做用域鏈,什麼是原型鏈。css
做用域是針對變量的,好比咱們建立了一個函數,函數裏面又包含了一個函數,那麼如今就有三個做用域html
全局做用域==>函數1做用域==>函數2做用域函數
做用域的特色就是,先在本身的變量範圍中查找,若是找不到,就會沿着做用域往上找。prototype
如:htm
var a = 1;function b(){ var a = 2; function c(){ var a = 3; console.log(a); } c(); } b();
最後打印出來的是3,由於執行函數c()的時候它在本身的範圍內找到了變量a因此就不會越上繼續查找,若是在函數c()中沒有找到則會繼續向上找,一直會找到全局變量a,這個查找的過程就叫做用域鏈。blog
不知道你有沒有疑問,函數c爲何能夠在函數b中查找變量a,由於函數c是在函數b中建立的,也就是說函數c的做用域包括了函數b的做用域,固然也包括了全局做用域,可是函數b不能向函數c中查找變量,由於做用域只會向上查找。繼承
那麼什麼是原型鏈呢?原型鏈
原型鏈是針對構造函數的,好比我先建立了一個函數,而後經過一個變量new了這個函數,那麼這個被new出來的函數就會繼承建立出來的那個函數的屬性,而後若是我訪問new出來的這個函數的某個屬性,可是我並無在這個new出來的函數中定義這個變量,那麼它就會往上(向建立出它的函數中)查找,這個查找的過程就叫作原型鏈。作用域
Object ==> 構造函數1 ==> 構造函數2get
就和css中的繼承同樣,若是自身沒有定義就會繼承父元素的樣式。
function a(){}; a.prototype.name = "aaa";var b = new a(); console.log(b.name); //aaa