摘要:而声明一个变量,如果没有明显的赋值操作,那么默认为赋值中有三种变量声明的方式,和。而这后两种声明方式,是在里才出现的。函数的参数不要用声明,嘛,就用来声明常量,或是不改变初值的变量参考资料和命令深入浅出和
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,也是一个块作用域的变量声明方式,除此以外还有自己的特点
必须在声明的同时赋值初始值
一旦赋值就不能改变,而且声明的变量通常是常量,用大写表示
也是因为2的原因,所以不能作为for循环的循环变量
栗子?
这个例子说明const不能作为for循环的变量
这个例子说明const声明的变量赋值后不能改,只是同名变量不能再赋值,但是可以给变量的属性赋值
最后来个小总结:
var嘛,能用let的时候就不用var,比如用let的很好的场景:for的循环变量,可以保证每一次循环都是一个新变量,而不是用var时候的同一个变量,if或是switch里面,但是注意一种情况就是let x = x + 1这个时候是会报错的,因为也是犯了未声明就使用的错,赋值操作是从右到左的,也就是说会先计算好右边的值,才会把最终结果赋值给左边。函数的参数不要用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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94268.html
摘要:语法和数据类型正文开始本章节复习的是中的基本语法,变量声明,数据类型和字面量。声明一个块作用域的局部变量,可赋一个初始值。变量声明有三种方式如,声明局部变量和全局变量。 最近开始把精力放在重新复习JavaScript的基础知识上面,不再太追求各种花枝招展的前端框架,框架再多,适合实际项目才是最重要。 上星期在掘金发布了几篇文章,其中最大块算是 【复习资料】ES6/ES7/ES8/ES...
摘要:但是如果使用,作用域块级作用域内,在还没使用声明一个变量的时候,访问该变量,将会获得,从作用域开始到语句之间,就是暂存死区。 0x001 var 语法 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]]; 使用 var a, b=2 // 声明多个变量,可以赋值,也可以不赋值 a=1 // 先声...
摘要:规范对其是这样进行的描述的。声明定义了在正在运行的执行上下文作用域内的变量环境中的变量。在执行时,由带有的定义的变量被赋其设定项的的值。由于变量已经被声明,是可访问的,因此会打印出正确的结果。 你想在在变量声明之前就使用变量?以后再也别这样做了。 新的声明方式(let,const)较之之前的声明方式(var),还有一个区别,就是新的方式不允许在变量声明之前就使用该变量,但是var是可以...
摘要:已经被声明了举例说明块级作用域报错,常量初始化之后内部值不可改必须初始化赋值的问题。不支持预解析不允许重复声明支持块级作用域举例说明报错,。解决地址引用的方法通过转化为字符串,再转化为对象。此方法存在问题中缺少 1.var , let , const var 1.预解析(变量提升) 2.可以重复声明变量 let 1.不支持预解析(必须先声明,后使用...
阅读 3693·2021-10-14 09:43
阅读 3293·2021-08-25 09:38
阅读 591·2019-08-30 15:55
阅读 1321·2019-08-30 13:05
阅读 2218·2019-08-29 16:05
阅读 473·2019-08-29 12:58
阅读 2771·2019-08-29 12:34
阅读 3223·2019-08-26 12:15