We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
undefined
xx is not defined
Array.push(1)
Obj['key']=1
var:直接在栈内存里预分配内存空间,然后等到实际语句执行的时候,再存储对应的变量,如果传的是引用类型,那么会在堆内存里开辟一个内存空间存储实际内容,栈内存会存储一个指向堆内存的指针
let: 是不会在栈内存里预分配内存空间,而且在栈内存分配变量时,做一个检查,如果已经有相同变量名存在就会报错
const:也不会预分配内存空间,在栈内存分配变量时也会做同样的检查。不过const存储的变量是不可修改的,对于基本类型来说无法修改定义的值,对于引用类型来说你无法修改栈内存里分配的指针,但可以修改指针指向的对象里面的属性
const
The text was updated successfully, but these errors were encountered:
No branches or pull requests
var、let 和 const区别
undefined
的原因由来xx is not defined
,这就是暂时性死区的由来。等到解析到有let那一行的时候,才会进入初始化阶段。如果let的那一行是赋值操作,则初始化和赋值同时进行Array.push(1)
或者Obj['key']=1
,命令声明的常量不提升,存在暂时性死区,只能在声明的位置后面使用实现原理
var:直接在栈内存里预分配内存空间,然后等到实际语句执行的时候,再存储对应的变量,如果传的是引用类型,那么会在堆内存里开辟一个内存空间存储实际内容,栈内存会存储一个指向堆内存的指针
let: 是不会在栈内存里预分配内存空间,而且在栈内存分配变量时,做一个检查,如果已经有相同变量名存在就会报错
const:也不会预分配内存空间,在栈内存分配变量时也会做同样的检查。不过
const
存储的变量是不可修改的,对于基本类型来说无法修改定义的值,对于引用类型来说你无法修改栈内存里分配的指针,但可以修改指针指向的对象里面的属性The text was updated successfully, but these errors were encountered: