栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript什么是时间死区?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript什么是时间死区?

let
与以下内容
const
有两个主要区别
var

  1. 它们是块作用域的。
  2. var
    在声明之前访问a 会有结果
    undefined
    ;在声明之前访问a
    let
    const
    throws
    ReferenceError
console.log(aVar); // undefinedconsole.log(aLet); // causes ReferenceError: aLet is not definedvar aVar = 1;let aLet = 2;

从这些示例中可以看出,

let
声明(和
const
,以相同的方式工作)可能不会被吊起,因为
aLet
在赋值之前似乎并不存在。

这不是的情况下,however-

let
const
被悬挂(如
var
class
function
),但有输入范围和所声明,他们不能被访问之间的时段。该时间段是时间盲区(TDZ)。

该TDZ结束时

aLet
被宣布,而不是分配:

//console.log(aLet)  // would throw ReferenceErrorlet aLet;console.log(aLet); // undefinedaLet = 10;console.log(aLet); // 10

此示例显示let被提升:

let x = 'outer value';(function() {  // start TDZ for x  console.log(x);  let x = 'inner value'; // declaration ends TDZ for x}());

x
在内部范围内访问仍会导致
ReferenceError
。如果
let
不悬挂,它将记录
outer value

TDZ是一件好事,因为它有助于突出显示错误-很少在声明之前访问值。

TDZ也适用于默认函数参数。参数从左到右求值,每个参数在TDZ中,直到被分配:

// b is in TDZ until its value is assignedfunction testDefaults(a=b, b) { }testDefaults(undefined, 1); // throws ReferenceError because the evaluation of a reads b before it has been evaluated.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号