ES6中的(let和const)详细理解

ES6详细理解

let && const

let

基本用法
ES6新增let声明变量,用法类似于var,但是let定义的变量只在命令所在的代码块内有效

{
	let a = 10;
	var b = 1;
}
a //报错  a is not definde
b // 1

上面的代码a已经在外部调用,而它定义的代码在内部,所以会报错。
建议在for循环中使用let定义i 防止变量污染
注意点
let不存在变量提升
var定义的变量,会进行变量提升,先进行变量声明,值为undefined
之后进行赋值

console.log(a) // 输出值为undefined
var a = 2;

console.log(b);//输出值为ReferenceError
let b = 3

暂时性死区
只要块级作用域内存在let命令,不受外部的影响

var tmp = 123;
if(true){
	tmp = 'abc';
	let tmp
}

在if内部重新定义了tmp导致又重新绑定了这个块级作用域,所以在let声明变量前,对tmp赋值会报错

if (true) {
  // TDZ开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”。
let 不允许在相同作用域内,重复声明同一个变量。

// 报错
function func() {
  let a = 10;
  var a = 1;
}

// 报错
function func() {
  let a = 10;
  let a = 1;
}

块级作用域与函数声明
ES5中函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明
ES6引入了块级作用域,明确允许在块级作用域之中声明函数,在ES6中,函数声明的行为类似于let,在块级作用域之外不可引用

const

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

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

改变定义的值会报错
const 声明的变量不得改变值,一旦声明变量,就必须立即初始化,不能先声明后赋值
const 实际上保证的不是值不变,而是变量指向的那个内存地址保存的数据不得改动

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

上面代码中,常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错。
ES6中声明变量得六种方式
ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。

顶层对象的属性

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。
var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值