重学ES6(一) var let 和 const

var 是ES5中声明变量的方式,ES6中新增了let 和 const两种生命变量的方式。

1.let

用法类似于var 基本用法:

let a = 1;
var a = 1;

let与var的区别:

1) 块级作用域

var 声明的变量,不存在块级作用域,只存在函数作用域。

比如说

console.log(a)  // undefined
{
    var a = 1;
}
console.log(a) // 1

而let命令所声明的变量,只在let命令所在的代码块内有效。

{
  let a = 1;
}
console.log(a); // a in not defined

2) 暂时性死区和变量提升

在ES5中存在变量提升,函数及变量的声明都将被提升到函数的最顶部,这使得你可以在声明一个变量前就使用它 

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

上面的代码相当于

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

let 和 const不存在变量提升,如果你在声明一个变量前使用它那么就会报错

console.log(a)
let a = 1; // ReferenceError

如果区块中存在let,const 那么在这个区块用这些命令声明的变量一开始就绑定了这个作用域,形成了封闭作用域,不再受外界影响。在该变量声明前,该变量都是不可用的,这在语法上叫做 暂时性死区

看下面的例子

var a = 1;
{
    console.log(a) // ReferenceError: a is not defined
    let a = 2;
}


var a = 1;
{
  console.log(a)  // 1
  var a = 2;
}

// a 是全局变量 但是块级作用域内let又声明了一个局部变量a,导致后者绑定这个块级作用域,所以在let声明变量前,对a操作机会报错。

3)不允许重复声明

直接看代码

var a = 1;
var a = 2;
console.log(a)  // 2

let a = 1;
let a = 2;
console.log(a)  // Identifier 'a' has already been declared

2.const

const声明一个只读的常量。一旦声明,常量的值就不能改变。

用法:

const a = 1;
a = 2;  // TypeError: Assignment to constant variable.

值得注意的是,const的本质,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

由于基本类型的变量存放在栈区,引用类型的变量同时保存在堆内存和栈内存(对象保存在堆内存,而对象的引用保存在栈内存,js是不允许直接操作堆内存,当我们操作的时候,实际上操作的是保存在栈内存的对象的引用)

对于引用数据类型,const只能保证指向这个对象的引用的指针是不变的,因此,当用const 声明一个对象或数组时,是可以对数组或数组中的数据进行变动的

const a = [1,3,3]
a[0] = 2;
console.log(a) // [2,3,3]

const a = {
  b: 1,
  c: 2
}

a.c = 3;
console.log(a); // {b:1 ,c:3}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值