基本用法
es6新增了let和const命令。let用于声明变量,用法与var类似,不过let命令声明的变量只作用于let所在的代码块中,也就是在其所属的{}中。而var声明的变量,是全局变量。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
{
let a = 10;
var b = 20;
}
console.log(a) // 此时会报错,undefined
console.log(b) // 20
const声明的变量,声明之后值不可改变,可用于声明一些固定的常量,而且const一旦声明就必须初始化,不能留到后面再赋值。
注意,使用const声明对象的时候,只能保证对象的引用地址不被更改,并非此对象不被修改。
const foo = { name: 'tabBin' }
foo.name = 'Jane'; // okay
foo.age = 25; // okay
foo = { name: 'LILI' } // 报错,因为改变了引用关系
{
const Pi; // 报错,一旦声明变量,应该立即赋值
Pi = 3.1415926;
}
const Pi = 3.1415926; // true
Pi = 3.14; // false,声明之后值不可以改变
let声明的变量,声明之后的值和类型都可以改变,不做任何限制。
let声明变量,变量不会被提升
使用var声明变量,变量会被提升,即变量可以在声明之前使用,得到的值为undefined。这种现象在某些情况下是很不友好的,因为按照一般逻辑,不管在什么语言中,一个变量应该是先声明再使用,而不是在未声明之前就可以被使用。
console.log(Pi) // undefined
var Pi = 3.14
为了解决这个问题,es6规定了,let声明的变量,必须要在声明之后才可以被使用,否则会报错。
console.log(Pi) // 报错
let Pi = 3.14
不允许重复声明
let和const不允许在相同作用域内声明同一个变量,即同一个作用域内不允许出现名称相同的变量。
let a = 10;
let a = 5;
var a = 15;
const a = 15;
class a {}
function a {}
// 以上几种在同一块级作用域内只能出现一种
总结
-只在声明所在的块级作用域内有效。
-不提升,同时存在暂时性死区,只能在声明的位置后面使用。
-不可重复声明。
-const声明的值不可改变。
块级作用域
javascript中只有全局作用域和函数作用域,没有块级作用域这一概念。而es6新增了块级作用域,简言之,块级作用域主要由{}组成,在{}之内的都属于一个块级作用域,if和for里面的{}也属于一个块级作用域。
-var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
-let和const定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
// 块作用域
{
const a = 10;
let b = 11;
var c = 12;
console.log(a) // 10
console.log(b) // 11
console.log(c) // 12
}
console.log(a) // 报错
console.log(b) // 报错
console.log(c) // 12
// 函数作用域
(function A () {
const a = 10;
let b = 11;
var c = 12;
console.log(a) // 10
console.log(b) // 11
console.log(c) // 12
})()
console.log(a) // 报错
console.log(b) // 报错
console.log(c) // 报错
网友评论