脚本宝典收集整理的这篇文章主要介绍了Js基础——变量声明 var let const,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Js的变量特点是松散型,就是说值跟类型是没有关系的,变量只是一个存值的占位符,不会根据初始化存入的值类型,给变量设置特定的类型,所以变量在初始化后,可以在改变值的同时改变值类型。而声明一个变量,如果没有明显的赋值操作,那么默认为赋值undefined
Js中有三种变量声明的方式:var ,let和const。而这后两种声明方式,是在es6里才出现的。他们可以说是弥补var在变量声明的遗憾,解决了在使用过程中出现的一些问题
VAR声明
var的特点如下:
- 作用域范围为封闭的全局函数或是局部函数
- 同一个作用域里重复声明同名变量,不会报错
- 在嵌套的子函数里,重新声明外层函数中同名的变量,不会改变外层函数中变量的值
- 变量可以提升到全局代码或是函数顶端执行,所以打印变量值可以在书写声明变量之前执行,也不会报错,而赋值只有等到执行到赋值那一句才会执行
- 没有声明的变量,会被隐式创建为全局变量,即全局对象的属性(独有)
非声明的变量,只有在赋值的时候才会被创建
非声明的变量,因为是全局对象的属性,所以可以用delete删除
栗子?
这个例子说明非声明的变量,变为全局对象的属性,可以delete删除
let声明
let声明变量又称更精确的var,主要应用于块作用域,也就是if for switch以及{}这样的块里,可以出现在它自己声明所在的块和它包含的子块里。
它有这样的特点:
- 在同一个块作用域里,重新声明一个同名变量,会报错
- 在嵌套中的子块作用域里,重新声明一个与外层块作用域相同的同名变量,不会保留外层块的变量值,因为属于不同的变量作用域
- 没有提升作用,所以在变量声明之前使用会报错,这一个现象,也称为:暂存死区
- 不能作用全局对象的属性
应用:因为可以是块作用域,所以let的出现,可以代替立即执行函数
栗子?
这个例子说明,var可以提升变量声明,但是let不可以
这个例子说明,同名的变量子块中的变量跟外层块中的变量,是不同的两个变量
这个例子说明,即便是有全局变量,但是在块的作用域里,有let声明的同名作用域起作用,而且在声明之前不可用
这个例子说明,不能用let声明跟参数同名的变量
这个例子说明,let的使用,替换了立即执行函数
const声明
const也有let的特点3和4,也是一个块作用域的变量声明方式,除此以外还有自己的特点
栗子?
这个例子说明const不能作为for循环的变量
这个例子说明const声明的变量赋值后不能改,只是同名变量不能再赋值,但是可以给变量的属性赋值
最后来个小总结:
var嘛,能用let的时候就不用var,比如用let的很好的场景:for的循环变量,可以保证每一次循环都是一个新变量,而不是用var时候的同一个变量,if或是switch里面,但是注意一种情况就是let x = x + 1这个时候是会报错的,因为也是犯了未声明就使用的错,赋值操作是@R_777_1715@的,也就是说会先计算好右边的值,才会把最终结果赋值给左边。函数的参数不要用let声明,
const嘛,就用来声明常量,或是不改变初值的变量
参考资料:https://developer.mozilla.org...
https://developer.mozilla.org...
https://developer.mozilla.org...
http://voidcanvas.com/es6-var...
let 和 const 命令
Let It Be - How to declare JavaScript variables
深入浅出ES6:let和const
以上是脚本宝典为你收集整理的Js基础——变量声明 var let const全部内容,希望文章能够帮你解决Js基础——变量声明 var let const所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。