iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0
自我挑戰組

JavaScript核心篇系列 第 4

【JavaScript 核心】範圍鍊

範圍鍊(Scope chain)

範圍鍊
函式內的變數若有自己的值,就會用自己的。
若是函式內的變數找不到值,就會往外一層函式查找,
直到全域環境有找到或是沒找到 (undefined)。

範圍鍊是依據函式文法本身來決定,與執行環境無關

讓我們來看下面這張簡單的示意圖
scopechain.jpg

fn2() 內的 a 在自己這層找不到時,就會往上一層 fn1() 找到 a 並使用它的值

fn2() 內的 b,自己就有宣告 b 值,所以就用自己的

fn2() 內的 c,自己找不到,往上一層 fn1()也沒有,最後找到全域的 c 並套用

範例:把上圖的狀況轉換成字長版本

var person = '老媽'
function sayHi() {
  console.log('hi ' + person);
}
function doMorningWork() {
  var person = '老爸';
  function meetAuntie() {
    var person = '漂亮阿姨';
    console.log('哈囉~ ' + person);
  }
  meetAuntie();
}
sayHi();
doMorningWork();
  1. 當我們執行sayHi() 時,person會指向全域的老媽,因為sayHi()本身沒有person這個變數

  2. 執行 doMorningWork() 時,繼續會執行內一層的meetAuntie(),此時 meetAuntie()person 會指向 '漂亮阿姨',因為自己本身就有宣告這個變數

  3. 同上一個情境,若meetAuntie() 沒有宣告 person ,此時 person就會指向外面一層的 '老爸',再若是沒有找到,最後就會指向全域宣告的 person = '老媽'


上一篇
【JavaScript 核心】作用域 & 執行環境與堆疊
下一篇
【JavaScript 核心】函式提升
系列文
JavaScript核心篇19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言