JavaScript中let a=Array,b;未报错的原因?Array在此处的作用是什么?
关于let声明中Array作用的疑问
问题场景
先看两段JavaScript代码的不同表现:
代码1(正常运行)
function Pract() { let a = Array, b; b = 1; return b; } console.log(Pract()) // Output: 1
代码2(执行报错)
function Pract() { let a = b; b = 1; return b; } console.log(Pract()) // Output: Error
疑问:第二段报错是因为b未定义,但第一段里let a = Array, b;中的b同样没赋值,却不会报错,想知道这里Array的作用是什么?
问题解答
核心差在变量声明的时机,Array本身只是JavaScript内置的全局构造函数,它的作用只是让这条let声明语句的语法合法,同时完成了b的声明:
第一段代码里,
let a = Array, b;是一条let声明语句,一次性完成了两个变量的声明:a被赋值为全局的Array构造函数,b则只被声明、未赋值(此时b的值是undefined,但已经存在于当前函数的作用域中)。后续给b赋值1并返回完全合法,因为b早就被声明过了。第二段代码里,
let a = b;执行时,b既没有被当前作用域的let/var/const声明过,也不是全局变量。后面的b = 1是隐式赋值操作,不是声明,等不到那一步代码就会先报错——因为当前作用域找不到b这个标识符。
简单说,Array在这里就是个“合法赋值目标”,让let声明语句能顺带完成b的声明,而第二段里b在赋值给a前根本没被声明过,所以触发错误。
内容的提问来源于stack exchange,提问作者Navid
相关产品推荐
相关产品推荐

