iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

大器可以晚成—— 30歲才開始的轉職工程師之路系列 第 10

[ Day 10 | JS ] 全域變數 & 區域變數

  • 分享至 

  • xImage
  •  

全域變數

在函式外宣告的變數屬於全域變數,這時所有的函式都可以取用這個變數。

//在函式外宣告一個變數
let steak = 500;

function total(num) {
  //在函式內也可以取用
  console.log(num * steak);
};

total(2);  // 1000
console.log(steak); //500

區域變數

在函式內宣告的變數,只有在宣告的這個函式內才可以取用。

function total(num) {
  //在函式內宣告一個變數
  let pork = 250;
  console.log(num * pork);
};

total(2);  //500
console.log(pork); //pork is not defined

變數的作用域

為什麼在函式外宣告的變數所有函式都可以取用呢?
當我們宣告函示時,都會在執行環境內新增記憶體,而這塊範圍就式這個變數的作用域。
假若你在一個函式中寫到了某個變數,但卻沒有在這個函式內宣告,它就會開始向外去尋找這個變數來使用。

let A5Beef = 1000;

function treat() {
  let guest = "哥哥";
  let quantity = 2;
  
  function totalPrice() {
    //此時內層函式沒有需要的變數,就會向外層去尋找
    return `這頓飯我請${guest}吃,不過才 ${quantity * A5Beef} 元嘛!(泣)`
  };
  console.log(totalPrice());
};

treat();
//這頓飯我請哥哥吃,不過才 2000 元嘛!(泣)

內層的函式 totalPrice 需要用到的變數因為自己沒有,就開始向外層尋找,
外層再找不到 A5Beef 這個變數時,又繼續向外面找。

除了作用域之外的差別是什麼?

無論全域變數還是區域變數,在宣告時都會占掉一個記憶位置;
差別在於區域變數只有在執行時才會產生並占掉記憶體位置,並且在執行完後就會將記憶體釋放。


上一篇
[ Day 9 | JS ] 函式 function
下一篇
[ Day 11 | JS ] 練習用 function 寫一個請客計算機
系列文
大器可以晚成—— 30歲才開始的轉職工程師之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言