Javascript 进阶 8-3 Let 有没有 Hoisting?暂时性死区介绍

这篇文章主要是要来探讨 Let 有没有 Hoisting?

之前提过,提升(hoisting)简单来说分为创造以及执行的两个阶段~

如果对于提升(hoisting)这个观念还是没有很清楚的概念的话,可以参考这篇文章。

那么 let 有没有类似这样的状态呢?

console.log(odin);let odin = 'husky';

http://img2.58codes.com/2024/20121770P00UUwuGdv.png

好,首先这样状况回给我们的是错误的讯息,并且告诉我们在还没有宣告之前,没有办法针对这个变数进行调用。

那我们在修改一下程式码改变情境:

console.log(odin);let odin = 'husky';{    console.log(odin); // 如果没有提升的话,照理说应该可以取得外层的结果)(husky)    let odin = 'dog';}

这边呢,如同注解里面说的,如果有提升的话,可能就会出现不同的状态。那我们来看看有甚么结果~

http://img2.58codes.com/2024/201217706Ko1a9eTYu.png

他一样跳出一个错误,没有办法在初始化之前取得 odin 这个变数。

{       // 创造    let odin;    // 暂时性死区 TDZ    // 执行    console.log(odin);    let odin = 'dog';}

其实实际上的状况是这样,let也有类似提升的概念,但提升完之后,会有一个暂时性死区的阶段,跟一般的提升不同,一般的提升会先给予变数 undefined 的状态。

如果在暂时性死区的时候针对变数进行调用,就会报错。

稍微总结一下刚刚的观念~

1. let 一样会有创造阶段

2. 但从创造到实际宣告的阶段会出现 TDZ,这个区域无法呼叫变数

3. 有创造到执行的概念,但不会预先出现 undefined 而是出现错误讯息提示

4. 文件不会表明这与 var 的 Hoisting 相同

再来看看一些程式码~

console.log(typeof a);console.log(typeof myName);let myName = '';

http://img2.58codes.com/2024/20121770EFoj5JIag3.png

当我们利用 typeof 针对 not define 的变数进行检查的时候,会出现 undefined

但针对 let 宣告的变数还是依然会报错,也就是说还是在暂时性死区中调用该变数,所以系统进行报错!

以上就是针对 Let 有没有 Hoisting? 以及暂时性死区介绍,没有问题的话就继续往下吧!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章