iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Modern Web

用Node.js建立專屬於你的API吧系列 第 7

Day7 - JavaScript進階概念(一)- 區塊/函數作用域

  • 分享至 

  • xImage
  •  

前情提要

在 JS 的 ES6 中,引進了一項新的概念,就是區塊作用域,而他實際的應用就是昨天講到變量聲明裡面的 let 和 const,而今天我們就來好好了解 let、const 的概念,還有 var 到底和他們有什麼差別吧。

區域變數 VS 全域變數

在進入正題以前,先來了解區域變數和全域變數的概念,這樣有助於你理解下面作用域的概念是什麼。用以下程式碼當作例子講解:

    let global = 1;
    for(let i = 0; i < 10; i++) {
        let block = 2;
        console.log(global); //可運行
        console.log(block); //可運行
    }
    console.log(block); //不可運行,會報錯,block為區域變數,不能在被宣告的區塊外被使用
  1. 如何區分:
    在程式碼中,我們區分全域或是區域變數的方法,最主要是以區塊為主,只要是在區塊中的變數就視同為區域變數,而區塊的種類有很多,函數是一個區塊,for 判斷式是一個區塊,if/else 判斷式也算是一個區塊,總括來說只要被大括號括起來的(包括判斷語句)都能算是一個區塊,而只要不是在區塊內宣告的變數,都視做為全域變數。

  2. 功能差別:

    • 全域變數:此變數可以在任何地方被使用。例如 global 變數可以在 for 判斷式裡運作。

    • 區域變數:此變數只能在宣告該變數的區域被取用。例如 block 變數只能在宣告他的 for 區塊裡被使用,在那以外的地方不能被使用,會報錯。

函數作用域

  • 變量聲明:var

  • 概念:在前面了解到了區域和全域變數的差別,而函數作用域的意思就是,他只認在函數內宣告的變數為區域變數,其他的都視為全域變數。以 var 來當作變量聲明的除了昨天說的特性,還有今天講的這個。

  • 缺點:這樣會有一個致命的缺點就是,就是函數之外宣告的變數都會是全域變數,這就會導致可能不小心改到一些重要的值,而且在命名時如果名字一樣,還會不小改到,專案規模小是可以立即察覺到,但如果規模一大,就等於是大海撈針,要一個一個慢慢找,因此 JS 在 ES6 中引進了區塊作用域的概念,改善了這一問題。

區塊作用域

  • 變量聲明:let、const

  • 概念:如果以 let 和 const 來當作變量聲明,可以很好的解決以上問題,因為區塊作用域的概念是,只要在任何區塊內宣告的函數都視為區塊變數,其餘為全域變數,很好的改善了函數作用域會遇到的問題。

總結

以下我就用一張圖來總結今天在區塊、函數作用域中區塊變數和全域變數的差別:
https://ithelp.ithome.com.tw/upload/images/20220831/20151565zxeRf0Aqqb.png


上一篇
Day6 - JavaScript 寫 Hello World
下一篇
Day8 - JavaScript進階概念(二)- 匿名函數
系列文
用Node.js建立專屬於你的API吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言