const声明和全局变量

const

const跟let一样是es6中新的声明方法,很多的特性跟let是一样的。

特性

1.不可变更性

  • 声明简单的类型时,该变量无法修改,这就意味着不能声明不赋值
  • 声明的非简单的类型的数据时,可以在不改变改数据的内存地址的情况下,修改数据
const a=1
a=2
//报错

const a={b:1}
a.b=2
console.log(a)
a=3
// {b:2}
// 报错

从上面的例子可以看出来,其实const声明的值不是不可以改变,而是该变量指向的内存地址不能改变,在声明为一个常量的时候,变量的指针就是指向该常量,常量改变地址指向改变,所以报错。当时对于复合型数据,变量指向内存地址,不发生改变,也就是变量直接赋值成其他的值,内部的数据结构还是内容都是可以变化得。

2.无法变量提升

console.log(a)
var a=1
// undefined

console.log(a)
const a=1
// 报错

3.存在const不能重复定义

var a=1
var a=2
// 正常

const a=1
const a=2
// 报错

var a=1
const a=2
// 报错

let a=1
const a=2
//报错

只要同一作用域内存在相同变量被声明都会报错

4.只在块级作用域内生效

var a=1
if(true){
    const a=2
}
console.log(a)
// 1

5.块级作用域内只能够拿到该作用域内声明的const变量,外部被忽略

var a='博主好帅'
if(true){
    console.log('博主不帅')
    const a
}
// 报错

报错,并没有打印(说明博主还是很帅的嘛),块级作用域内存在const定义,就算外部定义了也会报错。

顶层对象的属性

在ES5中,顶层对象的属性和全局属性是等价的,在流浪器端window为顶级对象,在Node环境中global为顶级对象。

//es5
var a=1
console.log(window.a)
// 1

//es6
let a=1
console.log(window.a)
// undefined 

可以看出在es5中全局用var function声明还是跟全局挂钩的,而从es6开始,let const class等都不是挂在window上了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值