JavaScript 核心觀念(6)-執行環境與作用域-範圍鍊
嗨~大家好,我是Kris 今天要來說明 為什麼明明宣告在外層的變數甚至是不同地方的函式,卻可以正確的呼叫與執行。 範圍鍊 函式裡面沒有需要的變數時,就會向外層尋找 變數在外層宣告,但內層卻可以取得 JavaScript是語法作用域,所以並不會與執行堆疊有任何關係。 因此fu1()不會因為他是在fu2()下被呼叫 就去尋找fu2()裡的var value = 2; 而是會去外層尋找外面的var value =1;。 範圍鍊真正的意思是「當函式本身沒有相對應的變數或函式時,就會向外層去尋找」 而這個尋找的過程就是【範圍鍊】,因此這邊與執行堆疊、執行環境不會有任何直接關係。 JavaScript 因為是語法作用域的關係,在程式碼撰寫完畢時,就已經決定了作 用域。 以下提供幾個範例,大家可以跟著做做看哦 不同情況下分別會列印出什麼呢? 答案放在最下方 1. 2. 3. 4. 5. 解答分隔線 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 1. 哈囉~老媽 2. 哈囉~老媽 3. 哈囉~漂亮阿姨 4. 哈囉~老爸 5. 哈囉~老媽 //1. 只執行sayHi(),sayHi()裡沒有person此變數,因此向外層尋找,找到全域變數的'老媽' 其他兩個fn裡的變數皆是區域變數,不影響sayHi() //2. doMorningWork()裡的變數為區域變數,不影響sayHi(); *函式沒有被呼叫就不會執行哦,所以meetAuntie()不會執行 //3. 執行meetAuntie()時內部有person,故印出'漂亮阿姨' 不被doMorningWork()的'老爸'影響 //4. 執行meetAuntie()時內部沒有person變數,所以向外層doMorningWork()尋找所以印出'老爸' //5. 執行meetAuntie()時內部沒有person變數,所以向外層doMorningWork()尋找也找...