es6

第1章 let和const命令

2019-01-17  本文已影响22人  短腿叔叔

基本用法

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) // 报错
上一篇 下一篇

猜你喜欢

热点阅读