es6-let与const

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

一、let

let 声明的变量只在 let 命令所在的代码块内有效,不能重复声明。

1、代码块内有效

{ let a = 0; var b = 1; }

a // ReferenceError: a is not defined

b // 1

2、不能重复声明

let a = 1; let a = 2;

a // Identifier 'a' has already been declared

3、不存在变量提升

let 不存在变量提升,var 会变量提升:

console.log(a); //ReferenceError: a is not defined

let a = "apple";

console.log(b); //undefined

var b = "banana";

二、const 命令

const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

 

暂时性死区:

var PI = "a";
if(true){
  console.log(PI);  // ReferenceError: PI is not defined
  const PI = "3.1415926";
}

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。

const如何做到声明的值是常量

保证变量指向的内存地址所保存的数据不允许改动。

对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。

对于复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重。

三、 var

定义变量,没有块的概念,可以跨块访问,不能跨函数访问,不初始化出现undefined,不会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值