iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >es6暂时性死区指的是什么
  • 935
分享到

es6暂时性死区指的是什么

2023-07-04 22:07:17 935人浏览 独家记忆
摘要

这篇“es6暂时性死区指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6暂时性死区指的是什么”文章吧。在es6中

这篇“es6暂时性死区指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6暂时性死区指的是什么”文章吧。

在es6中,暂时性死区是一个语法错误,是指let和const命令使区块形成封闭的作用域。在代码块内,使用let/const命令声明变量之前,该变量都是不可用的,在变量声明之前属于该变量的“死区”;这在语法上,称为“暂时性死区”。ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。

什么是暂时性死区

ES6中,在代码块内,使用let/const命令声明变量之前,该变量都是不可用的,在变量声明之前属于该变量的“死区”。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。ES标准并没有明确提出TDZ,但我们常用其描述let、const的不提升效果。

let/const和var的区别

在ES6之前,js的scope只有两种,全局作用域和函数作用域,但是在ES6种出现了块级作用域,即使用let/const可以定义块级作用域。那么在ES6的新特性中,最容易看到TDZ作用的就是使用let/const的使用上面。let/const与var的主要不同有两个地方:

  • let/const是使用区块作用域;var是使用函数作用域

  • 在let/const声明之前就访问对应的变量与常量,会抛出ReferenceError错误;但在var声明之前就访问对应的变量,则会得到undefined

console.log(Vname); // undefined;console.log(Lname); // ReferenceErrorvar Vname = 'xiaoxiao';let Lname = 'xiaoxiao';

实践证明当我们在未声明之前使用var定义的变量时会得到undefined,但是在使用let未定义的变量时会抛出错误。因为ES6中的let声明的变量是不存在变量提升的作用。

var x = 10;if (true) {    x = 20; // ReferenceError    let x; }

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

if (true) {  // TDZ开始  tmp = 'abc'; // ReferenceError  console.log(tmp); // ReferenceError  let tmp; // TDZ结束  console.log(tmp); // undefined  tmp = 123;  console.log(tmp); // 123}

上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”。

typeof的“死区”陷阱

我们都知道使用typeof 可以用来检测给定变量的数据类型,也可以使用它来判断值是否被定义。当返回undefined时表示值未定义;但是在const/let定义的变量在变量声明之前如果使用了typeof就会报错

typeof x; // ReferenceErrorlet x;

因为x是使用let声明的,那么在x未声明之前都属于暂时性死区,在使用typeof时就会报错。所以在使用let/const进行声明的变量在使用typeof时不一定安全喔。

typeof y; // 'undefined'

但是可以看出,如果我们只是用了typeof而没有去定义,也是不会报错的,从这粒可以看出只要没有明确规定使用const/let定义之前就是不会出错。

传参的“死区”陷阱

例如下面一段代码,我们在使用

function bar(x = y, y = 2) {  return [x, y];}bar(); // 报错

上面代码中,调用bar函数之所以报错(某些实现可能不报错),是因为参数x默认值等于另一个参数y,而此时y还没有声明,属于”死区“。如果y的默认值是x,就不会报错,因为此时x已经声明了。

function bar(x = 2, y = x) {  return [x, y];}bar(); // [2, 2]

使用var和let声明的另外一种区别。

// 不报错var x = x;// 报错let x = x;// ReferenceError: x is not defined

受“死区”的影响,使用let声明变量时,只要变量在还没有声明完成前使用,就会报错。上面这行就属于这个情况,在变量x的声明语句还没有执行完成前,就去取x的值,导致报错”x 未定义“。

以上就是关于“es6暂时性死区指的是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: es6暂时性死区指的是什么

本文链接: https://www.lsjlt.com/news/347827.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • es6暂时性死区指的是什么
    这篇“es6暂时性死区指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6暂时性死区指的是什么”文章吧。在es6中...
    99+
    2023-07-04
  • es6暂时性死区是什么意思
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。什么是暂时性死区 ES6中,在代码块内,使用let/const命令声明变量之前,该变量都是不可用的,在变量声明之前属于该变量的“死区”。这在语法上,称为“...
    99+
    2023-05-14
    暂时性死区 ES6
  • es6中暂时性死区的含义是什么
    本文小编为大家详细介绍“es6中暂时性死区的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6中暂时性死区的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • 一文读懂JS中的var/let/const和暂时性死区
    目录js中变量的特征变量的定义与访问简单说下作用域语法varlet与暂时性死区constjs中变量的特征 js的变量是松散类型的。变量可以用于保存任何类型的数据。所以js也被称为弱类...
    99+
    2023-02-27
    JS var let const JS var JS let JS const
  • 浅谈JavaScript暂时性死区与垃圾回收机制
    目录暂时性死区(TDZ)暂时性死区是什么js垃圾回收机制内存泄漏垃圾回收机制暂时性死区(TDZ) 暂时性死区是什么 我们来看一个例子 var tmp = 123; if (tru...
    99+
    2023-05-18
    JavaScript暂时性死区 JavaScript垃圾回收机制
  • JS中的var/let/const和暂时性死区实例分析
    本篇内容介绍了“JS中的var/let/const和暂时性死区实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!js中变量的特征js的变...
    99+
    2023-07-05
  • es6中=>指的是什么
    本篇内容主要讲解“es6中=>指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“es6中=>指的是什么”吧! es...
    99+
    2024-04-02
  • es6中symbol指的是什么
    这篇文章主要介绍es6中symbol指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! es6中的symbol是一种新的原始数据类型,用于表示独一无...
    99+
    2024-04-02
  • es6中let指的是什么
    这篇文章主要介绍“es6中let指的是什么”,在日常操作中,相信很多人在es6中let指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6中let指的是什么”的疑惑...
    99+
    2024-04-02
  • es5和es6指的是什么
    本文小编为大家详细介绍“es5和es6指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es5和es6指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。es5全称“ECMAScript 5”,是EC...
    99+
    2023-07-04
  • Python死锁指的是什么
    小编给大家分享一下Python死锁指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenStack。2...
    99+
    2023-06-14
  • es6的新特性是什么
    这篇文章将为大家详细讲解有关es6的新特性是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。es6新特性:const与let变量、模板字面量、解构、增强的对象字面量、for...of循环、展开运算符(....
    99+
    2023-06-06
  • es6三个点指的是什么
    这篇文章主要介绍“es6三个点指的是什么”,在日常操作中,相信很多人在es6三个点指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6三个点指的是什么”的疑惑有所帮...
    99+
    2024-04-02
  • es6模块化指的是什么
    今天小编给大家分享一下es6模块化指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2024-04-02
  • es6新特性是什么
    小编给大家分享一下es6新特性是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!es6新特性:1、ES6 引入了class,让JavaScript的面向对象编程...
    99+
    2023-06-06
  • es6等号箭头指的是什么
    本文小编为大家详细介绍“es6等号箭头指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6等号箭头指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。es6的等号箭头“=>”是指箭头函数,是...
    99+
    2023-07-04
  • es6中map指的是什么意思
    这篇文章将为大家详细讲解有关es6中map指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在es6中,map是一种数据结构,是“...
    99+
    2024-04-02
  • es6回调地狱指的是什么
    本文小编为大家详细介绍“es6回调地狱指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6回调地狱指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在es6中,回调地狱就是多层回调函数相互嵌套,...
    99+
    2023-07-05
  • ES6中let、const的区别是什么
    这篇文章将为大家详细讲解有关ES6中let、const的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。let和const相同点都存在块级作用域都不存在变量声明提...
    99+
    2024-04-02
  • es6中yield指的是什么意思
    小编给大家分享一下es6中yield指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作