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
在代码中,声明变量是基础,但是在javascript中,经历了从var到let,const的变化,到底有什么本质上的区别呢?
块级声明用于声明在指定块的作用域之外无法访问的变量。
let 和 const 是不会变量提升的,所以在声明变量之前,是用typeof是会报错的。
typeof
临时死区(TDZ)用来描述let/const不提升的效果
Javascript引擎在扫描代码发现变量声明时,要么将他们提升到作用域顶部(var声明),要么将声明放到TDZ(临时死区)中,访问TDZ中的变量会触发运行时错误。只有执行变量声明语句后,变量才会从TDZ中移出,然后才可以正常访问。
let 声明在循环内部的行为是标准中专门定义的,它不一定与let的不提升特性相关。
在for-in 和 for-of 循环中,let和const会每次迭代时创建新绑定,所以在循环体内,每次都访问到响应的迭代值。但在for-lenght中,const会报错。
var在全局作用域中,会创建一个新的全局变量作为全局对象。 let/const会在全局作用域下创建一个新的绑定,但是这个绑定不会添加为全局对象的属性(let/const不能覆盖全局,只能屏蔽它)
用var来定义全局变量,可以用在浏览器的跨frame或跨window访问代码。
默认使用const,只在确定需要改变值的时候用let。为了实现代码的不可变,防止某些错误的产生。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在代码中,声明变量是基础,但是在javascript中,经历了从var到let,const的变化,到底有什么本质上的区别呢?
var 声明的提升
块级声明
块级声明用于声明在指定块的作用域之外无法访问的变量。
临时死区
let 和 const 是不会变量提升的,所以在声明变量之前,是用
typeof
是会报错的。临时死区(TDZ)用来描述let/const不提升的效果
在循坏中的应用
在for-in 和 for-of 循环中,let和const会每次迭代时创建新绑定,所以在循环体内,每次都访问到响应的迭代值。但在for-lenght中,const会报错。
在全局作用域中的区别
var在全局作用域中,会创建一个新的全局变量作为全局对象。
let/const会在全局作用域下创建一个新的绑定,但是这个绑定不会添加为全局对象的属性(let/const不能覆盖全局,只能屏蔽它)
用var来定义全局变量,可以用在浏览器的跨frame或跨window访问代码。
最佳实践
默认使用const,只在确定需要改变值的时候用let。为了实现代码的不可变,防止某些错误的产生。
The text was updated successfully, but these errors were encountered: