DAY24: 作用域

既然提及了模块化,就来探讨一下作用域,在研读这段的时候,
原本觉得这没什麽,应该很好理解,
但我错了…,越看越雾飒飒…,所以今天要跟着参考书以及网路上的资料及范例,
来熟悉理解作用域的知识点。

在参考书上实作得知Nodejs与 JavaScript中的this指向有些不同。
实际操作看看,Google首页 ->右键[检查] -> Console
输入

console.log(this);

https://ithelp.ithome.com.tw/upload/images/20211005/20140244EYQus1mOno.png

是滴~对JavaScript来说,window是它的全局对象

而Nodejs又是另一回事了,对於Nodejs而言,
在Node控制台或脚本文件,这两个针对的指向是不同的。

首先,先测试在终端机的环境下。
直接在终端机输入node – v指令,接下来一样在终端机操做指令,
输入

console.log(this);

Node输出:
https://ithelp.ithome.com.tw/upload/images/20211005/20140244RIuooNgzP7.png

Node在"终端机"的环境中,全局的this指向了global对象
进一步的执行下面的程序码:

var Nicole = 1000;
console.log(this.nicole);
console.log(global.nicole);

输出结果:

https://ithelp.ithome.com.tw/upload/images/20211005/20140244Yrp79tkjkk.png

Node在终端机中,全局变量会被挂到global下

再来测试在脚本文件的环境下,一样直接输入

console.log(this);

输出的结果:
https://ithelp.ithome.com.tw/upload/images/20211005/20140244LuU06XzYAx.png

是一个空的对象 ( { } 代表为空)

接着也一样输入以下的程序码:

//(变量未被挂载)
var nicole=1000;
console.log(this.nicole);
console.log(global.nicole);

输出结果:

https://ithelp.ithome.com.tw/upload/images/20211005/20140244EBLpspvzmD.png

皆是undefined,这代表变量nicole并没有被挂到全局的this或 global对象
但若是我把var关键字拿掉後,

https://ithelp.ithome.com.tw/upload/images/20211005/201402440CiAHqmZsG.png

此时的nicole可以被挂到global对象,但全局的this还是undefined。

其实在Node脚本文件定义全局的this是指向在DAY23: 自定义模块中有提到的module.exports

总结:
Node在"终端机"的环境下,全局this与global对象是等价的,可以将他们看成是一样的东西。
Node在"脚本文件"的环境下,全局的this是指向module.exports,与glabal并不等价

参考资料:
李锴 着 <<新时期的Node.js入门>>


<<:  DAY21-EXCEL统计分析:单因子完全随机集区实例

>>:  Progressive Web App Web Push: 网站推播通知服务器实作入门 (23)

[Day 05] 产出回应内文&初探AES CBC加密 - [C#]丰收款API必备前置作业(四)

先来复习一下~在产出Message前我们会需要什麽东西呢? HashID: [Day 03]取得No...

【Day 14】- 今天来实作一个键盘监听器

Agenda 资安宣言 测试环境与工具 技术原理与程序码 References 下期预告 资安宣言 ...

29 | WordPress 区块编辑器 | 本次教学单元总结:

感谢大家花宝贵的时间阅读这系列的文章,由於篇幅有限,其实还有很多主题无法尽录,不过希望阅读过後,大...

Day 8 纸上原型 dirty prototype

最近实在是有点折磨,刚把民航局的案子吿一个段落,最近接到一个大案子,每天要腾个一小时来处理;晚上 I...

Python入门 Day 6 : # While True的用法

while 是循环结构(while一定要小写),while 後面搭配布林值(boolean)并用,F...