Categories: Front-End JavaScript

JS 作用域探討

語法作用域 = 靜態作用域

靜態作用域 及 動態作用域 之間的差別牽涉直譯語言的解譯及運行流程。
  • 資料參考: 六角學院 JavaScript 核心篇

變數作用域也會依據宣告的方式不同,產生不同的作用域:
未宣告:全域變數
var 宣告:作用域在 函式 中
letconst 宣告:作用域在 {} 中

JS 採用的是語法作用域, 只要確定你的作用域, 就不會再改變。

範例1

範例1 測試結果如下:

利用全域console.log() 去測試, 可否顯示函式 callname()作用域的值。

顯示出來的結果

callname()作用域的變數value, 用外層console.log 去讀取會得到: Uncaught ReferenceError value is not defined

原因:

全域console.log() 無法去 callname() 作用域去讀取該變數!

範例2

此範例我們加入全域變數 let name =’張小姐’

我們會知道最後被執行的call2()函式

原因:

call2()函式內部有呼叫 callname() 函式, 而callname()函式作用域內並沒有宣告name變數, 所以callname() 函式會去全域變數查找name值(綠色箭頭部分) 。

顯示出來的結果

以上就是不同的作用域之間的關係, 希望大家不要搞混了。

lioajimzen

Share
Published by
lioajimzen

Recent Posts

Vue – 運行ES Module,import與export

import 與 export 在Node.js 有提到其用法: Node.js require、module以及exports 模組設定 - Hugo Habor 每一個Javascript檔案可當作獨立模組系統(ES Module) 1. Module(模組)…

12 months ago

當你的Windows應用程式完全無法執行時,該怎麼辦?

作者今天遇到一個很奇怪的問題 寫程式寫到一半... 點擊應用程式時... 怎麼都跳不出畫面... 後來查詢了一下是Reg註冊可能被微軟更新給搞掉了... 文章資訊來源: 【以解決】各位.exe檔案打不開,不要相信"在 Windows 7 或 Windows Vista 中無法打開 .EXE 檔案"這篇文章…

2 years ago

Python environments in VS Code-建立虛擬環境

Python environments in VS CodePython-建立虛擬環境

2 years ago

Node.js 核心模組-create-server

Node.js可以提供你很多模組,今天來探索如何使用 Node.js 的 http 模組來架設一個簡單的伺服器。 本篇使用模組require 載入你所需要的模組。這次我們使用'http' 模組來創造一個簡單的server。 資料參考 Node.js - createServer 起手式 - iT…

2 years ago

Node.js require、module以及exports 模組設定

針對Node.js來談談 require、module以及exports 模組設定。這些概念允許開發者將大型程序分解成小的、可管理的、可重用的部分,稱為模塊。 下面將逐一介紹這些概念,以及它們如何與 JavaScript 關聯。 An Essential Guide to Node.js Modules (javascripttutorial.net) 1. Module(模組)…

2 years ago

JSON與foreach的逐一條列應用。

像是很多專案必須讀取國家資料中心的metadata,許多檔案格式為CSV、JSON、Html可以利用網頁技術去爬蟲;拿一個範例來嘗試看看就知道這些語法的實際用途。 [主題週]專題報導-開放資料 (Open Data)相關議題與應用 (114230) - Cool3c 在這裡我們使用台北市資料大平台 UBike2.0 作為資料依據! 目的 來抓取空位數量 >15, 抓取空位數量 <15。…

2 years ago