Day-13 观念补遗:TDZ与全域变数

在先前的『Day-06 始於足下:基本语法、陈述句与宣告』一文中,曾经介绍JavaScript的不同宣告法。监於var宣告的作用域(影响范围)太大,如今更倾向使用let(宣告变数)、const(宣告常数)。

而且,这两种新宣告法共享一种特性,称为「暂时死区(Temporal Dead Zone, TDZ)」。

暂时死区TDZ

新旧宣告法主要区别,计有:

  • var宣告的作用域为函式(function);let/const宣告为区块(block)(如 { })。
  • 使用变数前没有先宣告:後宣告var会出现undefined(变数提昇,如前文);後宣告let/const则会断定为错误(ReferenceError)。

此时,这个ReferenceError的状态,意味着暂时无法读取,此一「宣告变数、直到变数可以存取之间」的阶段,就是TDZ。透过此一规则设计,可以敦促使用者端正习惯,养成(变数)先宣告再使用的规范。

话虽如此,并不是完全否定var宣告的使用。监於其作用域大、变数提昇、可重复宣告的独特性,在必要情况下,仍无法被let/const宣告所完全取代。

全域变数/区域变数

本系列为文一直使用「全域变数」、「区域变数」的便利称呼,但严格上JavaScript并无「全域变数」,而是「全域物件」。在node.js中,全域物件叫 global。在浏览器中,全域物件叫 window。换言之,我们常用的console.log 的全名应该叫 window.console.log。

如前所述,var宣告的作用域为函式,再如前文所述,函式中没有var宣告的变数,就会变成「全域(效果的)变数」。在实务使用中,务必多加注意。


<<:  【把玩Azure DevOps】Day16 Artifacts应用:让外部合作夥伴也可以从Private nuget安装Package

>>:  [Day 13]每天前进一点应该也是进步吧?(後端篇)

[Day18] Webpack - 预处理器

前几天学到了 PostCSS、Babel 这些後处理器,来协助在打包时改写原始码来支援各种浏览器,今...

[ 卡卡 DAY 9 ] - React Native style 优化、共用没烦恼!window.innerWidth 在 RN 怎麽处理?

有没有想过如果我要调整整个 App 的主色或字体大小,要一个一个元件改有多累? 有没有想过只要改一...

[Golang]go test指令说明-心智图总结

1. -cpu a. 用途: 模拟程序在不同CPU核心数的计算机,效能表现。 b. 用来设定测试执行...

[Day18] THM AgentSudo

URL : https://tryhackme.com/room/agentsudoctf IP ...

Day 4: 人工智慧在音乐领域的应用 (AI发展史与简介 - 第一次寒冬)

到底什麽是AI? 我想大部份的人应该都对AI/人工智慧/人工智能这些字眼不陌生,尤其是在AlphaG...