原文地址:https://www.quora.com/What-is-the-scope-chain-in-JavaScript
假設你需要一個小石頭完成一個你正在完成的項目。你該怎么辦呢?
首先棋弥,你現(xiàn)在你自己的房間里找鲤妥,如果沒有找到你將去哪里找呢?
當然是走出房間到你的屋子里找音榜,如果屋子找不到你將去你的院子里找肥矢,如果院子里找不到你將去你所在的城市或者國家去找帐我,而這時你找到了這個可以滿足你完成項目的石頭塞琼。
而這和JavaScript有什么關系呢?
這就是作用域鏈如何在JavaScript(以及許多其他編程語言)中工作的簡單類比禁舷。因此彪杉,假設您是正在執(zhí)行的代碼,它需要變量的值(鵝卵石)來完成其工作牵咙。
因此JavaScript引擎將嘗試在執(zhí)行代碼的塊范圍(您的房間)中找到變量的值派近,當無法在那里找到值時,它將轉到其詞法外部范圍(您的房子)洁桌,如果甚至沒有找到那里渴丸,它將到達它的外部范圍的外部范圍(你的院子),直到它達到全局范圍,這就是作用域鏈谱轨。
舉個栗子:
function country() {
//Let's say global scope
//pebble found here, will get the value from here
var pebble = "stone";
function city() {
//pebble not found here too
//will go to country
function colony() {
//pebble not found here too
//will go to city
function house() {
//pebble not found here too
//will go to colony
function room() {
//executing code
//pebble not found
//will go to house to find it
console.log(pebble); //Output "stone"
}
room();
}
house();
}
colony();
}
city();
}
country();
這時輸出為stone戒幔,因為通過一級級查找他終于在country()函數(shù)的作用域中找到他想要的變量 pebble;這就是作用域鏈