ES6常量声明方式——const


上一篇说了ES6变量声明方式let( https://blog.csdn.net/juliaandjulia/article/details/107524107),今天就来聊聊ES6常量的声明方式。

定义常量

在ES5中定义一个常量:

Object.defineProperty(window,'PI',{
    value:3.14,
    writable: false
})
console.log(PI)//3.14
PI=5
console.log(PI)//3.14

在ES6中定义一个常量

//典型报错
const a=5
a=6//报错,常量不可以改变

const b//报错,常量必须赋初始值
b=6

//const声明的数组、对象的值可以被改变,不能改变的是变量的引用地址
const obj={
    name:'wdl',
    age:18,
}
console.log(obj)//{name: "wdl", age: 18}
obj.school='gdut'
obj.name='www'
console.log(obj)//{name: "www", age: 18, school: "gdut"}

const arr=[1,2,3]
arr.push(4)
console.log(arr)//[1,2,3,4]

//要是想固定值不变,可以用Object.freeze()冻结
const obj={
    name:'wdl',
    age:18,
    skill:{
        name:'code',
        year:11
    }
}
console.log(obj)//{name: "wdl", age: 18, skill: {name: 'code', year: 11}}
Object.freeze(obj)//freeze只能传对象不能传数组 做浅层冻结
Object.freeze(obj.skill)//手动递归冻结第二层
obj.school='gdut'
obj.skill.year=12
console.log(obj)//{name: "wdl", age: 18, skill: {name: 'code', year: 11}}

const声明常量拥有块级作用域

常见的作用域分为以下几个类型:

对象类型
window/global全局作用域
function函数作用域/局部作用域
{}块状作用域
this动态作用域

更多关于作用域建议阅读(.https://www.kancloud.cn/kancloud/you-dont-know-js-scope-closures/516609

const声明的块级作用域:

if(true){
    const a=5
}
console.log(a)//报错 a未定义 a仅在块级作用域有效

const不存在变量提升

先来看看什么叫变量提升。
var 声明的变量会在任意代码执行前处理,这意味着在任意地方声明变量都等同于在作用域顶部声明——即声明提升(可以在声明语句之前使用)。

console.log(a)//undefine (打印出undefined而不是报错,可见var存在变量提升)
var a = 5
//相当于
// var a
// console.log(a)
// a=5

function foo(){
    console.log(b)
    var b=5
}
foo()//undefined 
//相当于
//function foo(){
//	var b
//    console.log(b)
//    b=5
//}
//foo()

更多关于变量提升建议阅读 (深入理解js中变量提升: https://github.com/creeperyang/blog/issues/16.)

const声明的常量不存在变量提升

if(true){
    console.log(a)//报错 const声明不存在变量提升,a必须先声明再使用
    const a=5
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值