02 ES6 新引入的常量const和变量let详解

往期文章
01 ES6 use strict严格模式

const常量

const在es6里新增加的声明常量的指令,一旦定义后不能改变

1、定义在普通变量上

const a = 10;
a = 5; // Assignment to constant variable
2、只有代码块内可以访问
{
    const a = 10;
    console.log(a); // 10
 }
console.log(a); // a is not defined

3、定义在对象上
const静态对象的属性值可以改,但是对象obj不能被重新赋新对象。也就是不能修改obj对象的地址。

const obj = {id: 1, name: "Tom"};
obj.id = 2;
obj.name = "Sophia";
console.log(obj); // id: 2 name: "Sophia"
obj = {};    // invalid assignment to const `obj`

小测试
问题:求下面的user里面打印的id和name分别是多少?

function change(u) {
    u.name = "Frank";
    // 对象赋值
    u = {id: 2, name: "Sam"};
    u.name = "John";
}
var user = {id: 1, name: "Tom"};
change(user);
console.log(user);  // ?

答案:{id: 1, name: “Frank”}。因为赋值以后下面的u重新赋了新的对象地址,与上面的u已经引用完全不同的两个对象。

let块变量

let也是es6新增加的一个声明变量的指令。

1、先声明了变量方可使用

// 这里不允许在没有声明变量时就初始化
i = 10;  // i is not defined
// 之前已经使用var或者let声明过变量i,这里不允许再重复声明
let i = 100; 
**2、变量名不能重复**
// 这里只要使用let声明过变量,在此之前或者之后都不允许再重复声明
let i = 10;            
var i = 100; // Identifier 'i' has already been declared

3、变量只在代码块中起作用

{
    var a = 1;
    let b = 10;
 }
console.log(a); // 1
console.log(b); // ReferenceError: b is not defined.
let比较适合用在for循环中

for (let i = 0; i < 10; i++) {
  // 输出 0-9
  console.log(i);
}
console.log(i); // i is not defined

4、变量的作用域

// 区分let和var所在不同的作用域

var i = 10;        // 被挂载到当前window这个DOM对象上
console.log(this === window); // true
console.log(i); // 10
console.log(this.i, window.i); // 10 10

// 与window无关,就在当前页面作用域内
let j = 100;
console.log(j); // 100 
console.log(this.j, window.j); // undefined undefined 

5、不存在变量提升

// var的情况 
// 在块中,使用var声明的变量没有作用域(等于全局)
var i = 10;
{
    var i = 100;
    console.log(i);     // 100
 }
// 产生这个作用域提升的问题根源在于
// i是挂载在window对象之上,且可以重复定义使用!
console.log(i);            // 100
// let的情况
// 在块中,只有let声明的变量才有自己的块作用域(不存在变量提升)
var i = 10;
{
    let i = 100;
    console.log(i);     // 100
}
console.log(i);            // 10

阅读原文,获取视频教程。

了解更多:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值