ReferenceError: Cannot access ‘xxx‘ before initialization

简介: ReferenceError: Cannot access ‘xxx‘ before initialization

执行下面代码

let myname= 'kaimo666'
{
  console.log(myname) 
  let myname= 'kaimo777'
}




最终打印结果

20210321163819170.png


分析原因


在块作用域内,let声明的变量被提升,但变量只是创建被提升,初始化并没有被提升,在初始化之前使用变量,就会形成一个暂时性死区。


另外一个例子:

function test(){
  console.log(a)
  let a = 7;
}
test()


20210321165117857.png



执行test的时候,编译阶段a已经在内存中,为什么提前访问不了?

这主要是因为V8虚拟机做了限制,虽然a在内存中,但是当你在let a 之前访问a时,根据ECMAScript定义,虚拟机会阻止的访问!



拓展


   var的创建和初始化被提升,赋值不会被提升。

   let的创建被提升,初始化和赋值不会被提升。

   function的创建、初始化和赋值均会被提升。



目录
相关文章
|
2月前
|
编解码
KeyError: “No object named ‘BSRN‘ found in ‘arch‘ registry!“
KeyError: “No object named ‘BSRN‘ found in ‘arch‘ registry!“
61 0
|
10月前
error C2449: found ‘{‘ at file scope (missing function header?)和error C2059: syntax error : ‘}‘
error C2449: found ‘{‘ at file scope (missing function header?)和error C2059: syntax error : ‘}‘
72 0
|
5月前
|
JavaScript
Uncaught runtime errors: × ERROR Avoided redundant navigation to current location: “/xxx“.
Uncaught runtime errors: × ERROR Avoided redundant navigation to current location: “/xxx“.
61 0
|
6月前
|
Linux C++
【C++编译】C++ error:‘syscall’ was not declared in this scope
sys/syscall.h 内部表示,他封装了![[Pasted image 20220818151746.png]] 打开对应的 syscall.h 文件内部依旧没有 syscall()函数的声明。
38 0
|
内存技术
|
网络虚拟化
使用ChatGPT Access denied,Error reference number: 1020问题解决
使用ChatGPT Access denied,Error reference number: 1020问题解决
使用ChatGPT Access denied,Error reference number: 1020问题解决
|
C++
undefined reference to `vtable for XXX‘
undefined reference to `vtable for XXX‘
120 0
|
C语言
error: implicit declaration of function ‘VerifyFixClassname‘ is invalid in C99 [-Werror,-Wimplicit-f
error: implicit declaration of function ‘VerifyFixClassname‘ is invalid in C99 [-Werror,-Wimplicit-f
112 0
|
JavaScript 算法 前端开发
Property xxx was accessed during render but is not defined on instance
目前el-form的model主要用表单验证的,也就是配合el-form的rules和el-form-item的prop来使用的。不信的话,你可以增加一个rules和prop(为了调用验证方法,也el-form也加一个ref属性,相当于id或者class选择器的意思),但是不写model,然后验证的话,会提示缺少model,导致无法验证成功。
Property xxx was accessed during render but is not defined on instance
|
网络协议 关系型数据库 Linux
onfigure: error: no acceptable C compiler found in $PATH See `config.log' for more details 问题解决
onfigure: error: no acceptable C compiler found in $PATH See `config.log' for more details 问题解决
146 0