javascript的变量声明

栏目: JavaScript · 发布时间: 4年前

内容简介:在代码中,声明变量是基础,但是在javascript中,经历了从var到let,const的变化,到底有什么本质上的区别呢?本文的原文在我的博客中:欢迎star

在代码中,声明变量是基础,但是在javascript中,经历了从var到let,const的变化,到底有什么本质上的区别呢?

本文的原文在我的博客中: https://github.com/RachelRen/blog/issues/25

欢迎star

var 声明的提升

  1. var 不管在哪里声明的,都会被当成在当前作用域顶部声明的。
  2. 变量提升是在预编译的过程中发生的,赋值为undefined
  3. 被声明的变量还是在原来的地方,真正被赋值

块级声明

块级声明用于声明在指定块的作用域之外无法访问的变量。

  1. 在同一作用域内,相同的标识符只能有一个
  2. 当执行流离开这个块级,那么这些变量会被销毁
  3. 块级作用域中的变量会屏蔽全局作用域中的相同标识符的变量(即取的是块级作用域中的值)
  4. const 不能再赋值,但是可以修改 对象 的属性值
  5. 不会变量提升

临时死区

let 和 const 是不会变量提升的,所以在声明变量之前,是用 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。为了实现代码的不可变,防止某些错误的产生。


以上所述就是小编给大家介绍的《javascript的变量声明》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python金融衍生品大数据分析:建模、模拟、校准与对冲

Python金融衍生品大数据分析:建模、模拟、校准与对冲

【德】Yves Hilpisch(伊夫·希尔皮斯科) / 蔡立耑 / 电子工业出版社 / 2017-8 / 99.00

Python 在衍生工具分析领域占据重要地位,使机构能够快速、有效地提供定价、交易及风险管理的结果。《Python金融衍生品大数据分析:建模、模拟、校准与对冲》精心介绍了有效定价期权的四个领域:基于巿场定价的过程、完善的巿场模型、数值方法及技术。书中的内容分为三个部分。第一部分着眼于影响股指期权价值的风险,以及股票和利率的相关实证发现。第二部分包括套利定价理论、离散及连续时间的风险中性定价,并介绍......一起来看看 《Python金融衍生品大数据分析:建模、模拟、校准与对冲》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码