首页 > 其他分享 >class的声明特征跟const和let类似,都是作用于块级作用域,都有暂时性死区, 预处理阶段则会屏蔽外部变量。因此在声明之前访问变量a都会报错,在声明之后访问才可以正常输出。

class的声明特征跟const和let类似,都是作用于块级作用域,都有暂时性死区, 预处理阶段则会屏蔽外部变量。因此在声明之前访问变量a都会报错,在声明之后访问才可以正常输出。

时间:2023-11-15 22:59:15浏览次数:26  
标签:变量 作用域 访问 报错 test let 声明 class

依据以下JS代码,在位置A打印变量a与在位置B打印变量a各会有怎样的输出?

var a = 1;
function test(){
    // 位置A
class a {}
   // 位置B
}
test();

A
1、class a {}

B
报错、class a {}

C
报错、报错

D
1、报错

正确答案:B

class的声明特征跟const和let类似,都是作用于块级作用域,预处理阶段则会屏蔽外部变量。因此在声明之前访问变量a都会报错,在声明之后访问才可以正常输出。

class和let一样都有暂时性死区,在被声明前无法访问

也就是在当前作用域能找到,但是要在声明后才能访问
es6中的class和let const一样都不存在提升
(实际存在提升,只是因为TDZ的作用,并不会像var那样得到undefined,而是直接抛出错误)

原来的代码
var a = 1;
function test(){
//console.log(a) 位置A
class a {}
// console.log(a) 位置B
}
test();

实际上提升后的
var a = 1;
function test(){
console.log(a) 位置A //在test()作用域内找得到a
//是一个class但是存在TDZ暂时性死区,访问报错
class a {}
console.log(a) 位置B //a已经声明创建出来了
}
test()

标签:变量,作用域,访问,报错,test,let,声明,class
From: https://www.cnblogs.com/longmo666/p/17835042.html

相关文章