iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Modern Web

Node.js 非專業解說系列 第 25

DAY25: 作用域三種類

  • 分享至 

  • xImage
  •  

在這一篇主要講了Node 在終機端和腳本文件this不同的指向,那麼今天要來簡單介紹Nodejs作用域的種類,但今天討論的只限於在腳本文件的環境下

一、全局作用域

定義在全局作用域上的變量可通過global對象上抓取到。
換個方式說,如果今天變量沒有使用constvarlet…等關鍵字來定義的話,
它就屬於全局作用域。像是 :

//全局作用域 
nicole=1000;
console.log("global對象的結果是 "+ global.nicole);

nicole變量是由global定義而成,而nicole變量是在全局作用域之中,
所以就算是在不同的檔案文件也能被拜訪到。

比如說在名為 作用域.js 這個檔案上,寫上

nicole=1000;

再創另一個檔案名為 我是另一個檔案.jsrequire調用nicole這個變量

//全局作用域調用變量
require('./作用域.js');
console.log(nicole);

執行結果:
https://ithelp.ithome.com.tw/upload/images/20211006/20140244UYIOiaZgro.png

二、模塊作用域

在每個檔案文件定義於varletconst的變量都是位於模塊作用域中,
而每個檔案都是一組模塊,各自獨立運作,不同模塊作用域之間都是區隔開的,
模塊中的this指向module.exports

//模塊作用域
this.nicole=8000;
console.log(module.exports);

塊作用基本在每個程式語言都有塊作用域,
就像是C#語言的if判斷語句或是for迴圈等語句都是。

三、ES5的作用域

在ES5中只有全局作用域與函數作用域。
若假設已經有一個nicole變量屬於全局作用域

var nicole="Nicole";

這個變量可以在同一個檔案中任一位置被訪問到。
若還有需要在建立一個新的作用域,就建立一個新的函數來實現。

//新函數創建新的作用域
var nicole="LOVE";
function newNicole()
{
    var nicole="MYSELF";
    console.log("新作用域: "+nicole);
}
newNicole();
console.log(nicole);

執行結果:

https://ithelp.ithome.com.tw/upload/images/20211006/20140244NdCO3Ltx7V.png

雖然變量名稱是相同的,但是這兩個nicole個屬於兩個不同的作用域,
在函數中的作用域,不會影響到全局變量。


上一篇
DAY24: 作用域
下一篇
DAY26: 塊作用域
系列文
Node.js 非專業解說30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言