资讯专栏INFORMATION COLUMN

Js基础——变量声明 var let const

djfml / 442人阅读

摘要:而声明一个变量,如果没有明显的赋值操作,那么默认为赋值中有三种变量声明的方式,和。而这后两种声明方式,是在里才出现的。函数的参数不要用声明,嘛,就用来声明常量,或是不改变初值的变量参考资料和命令深入浅出和

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

相关文章

  • 前端基础_ES6

    摘要:声明三大关键字声明变量语法语法声明常量语法声明变量特性支持函数作用域支持预解析所谓变量提升支持重复声明同域同名变量函数作用域局部作用域预解析重复声明声明变量推荐特性支持块作用域不支持预解析不支持重复声明同域同名变量块作用域局部作用域不支持预 声明 三大关键字 声明变量: var (ES5语法) let (ES6语法) 声明常量: const (ES6语法) var 声明变量...

    wuyangnju 评论0 收藏0
  • 【重温基础】1.语法和数据类型

    摘要:语法和数据类型正文开始本章节复习的是中的基本语法,变量声明,数据类型和字面量。声明一个块作用域的局部变量,可赋一个初始值。变量声明有三种方式如,声明局部变量和全局变量。 最近开始把精力放在重新复习JavaScript的基础知识上面,不再太追求各种花枝招展的前端框架,框架再多,适合实际项目才是最重要。 上星期在掘金发布了几篇文章,其中最大块算是 【复习资料】ES6/ES7/ES8/ES...

    Darkgel 评论0 收藏0
  • es6基础0x002:varletconst、块级作用域、暂存死区

    摘要:但是如果使用,作用域块级作用域内,在还没使用声明一个变量的时候,访问该变量,将会获得,从作用域开始到语句之间,就是暂存死区。 0x001 var 语法 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]]; 使用 var a, b=2 // 声明多个变量,可以赋值,也可以不赋值 a=1 // 先声...

    scola666 评论0 收藏0
  • Javascript基础之-varletconst深入解析(二)

    摘要:规范对其是这样进行的描述的。声明定义了在正在运行的执行上下文作用域内的变量环境中的变量。在执行时,由带有的定义的变量被赋其设定项的的值。由于变量已经被声明,是可访问的,因此会打印出正确的结果。 你想在在变量声明之前就使用变量?以后再也别这样做了。 新的声明方式(let,const)较之之前的声明方式(var),还有一个区别,就是新的方式不允许在变量声明之前就使用该变量,但是var是可以...

    XiNGRZ 评论0 收藏0
  • JS基础入门篇(四十三)— ES6(一)

    摘要:已经被声明了举例说明块级作用域报错,常量初始化之后内部值不可改必须初始化赋值的问题。不支持预解析不允许重复声明支持块级作用域举例说明报错,。解决地址引用的方法通过转化为字符串,再转化为对象。此方法存在问题中缺少 1.var , let , const var 1.预解析(变量提升) 2.可以重复声明变量 let 1.不支持预解析(必须先声明,后使用...

    AaronYuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<