ES6——let和const的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38627581/article/details/82786610

一、let

1.let命令, 用于声明变量,只在let命令所在的代码块内有效
es5中的作用域有两种,全局作用域和函数作用域,es6中let为js新加入了块级作用域,这表示外层代码块不受内层代码块的影响。let命令只在当前块级作用域内有效。ES6 允许块级作用域的任意嵌套。允许在块级作用域之中声明函数,但是该函数只能在该块级作用域内有效。

注:在es6的浏览器中,es6为了兼容老代码,有如下规定

  • 允许在块级作用域内声明函数。
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
  • 同时,函数声明还会提升到所在的块级作用域的头部。
{
  let a = 10;
  var b =1;
}
console.log(b);//1
console.log(a);//a is not defined

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

2.let不存在变量的声明提前

声明提前:在js中var定义变量时,可以先使用变量,后定义。而let定义变量时不存在变量的声明提前,即变量必须先定义后使用。

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

// let 的情况
console.log(b); // b is not defined
let b= 2;

3.暂时性死区

暂时性死区:es6规定,如果块级作用域内存在let或const命令,那么在该块级作用域中,let和const就会行成封闭作用域,不受外界影响。凡是在声明之前就使用这些变量,就会报错。

var a = 123;
if (true) {
  a = 'abc'; // a is not defined
  let a;
}
console.log(a);

4.不允许重复声明

let不允许重复声明变量

// 报错
function func1() {
  var a = 10;
  var a = 1;
  console.log(a);
}

// 报错
function func2() {
  let a = 10;
  var a = 1;
  console.log(a);
}

// 报错
function func3() {
  let a = 10;
  let a = 1;
  console.log(a);
}

func1(); // 1
func2(); // Identifier 'a' has already been declared
func3(); // Identifier 'a' has already been declared

二、const

1.一旦声明,不可改变

2.一旦声明,必须赋值

3.存在暂时性死区

4.不可重复声明

5.不存在声明提前,必须先定义后使用

6.常量名常用全大写字母

const PI = 3.1415;
PI = 3.14; // Assignment to constant variable;

const a; //Missing initializer in const declaration
a = 10;

if (true) {
  const a = 5;
}
console.log(a); // a is not defined

if (true) {
  console.log(a); // a is not defined
  const a = 5;
}

var a = "a";
let b = 25;
const a = "b"; // Identifier 'a' has already been declared
const b = 30; // Identifier 'b' has already been declared

注:

对于引用类型数据(主要是对象和数组)来说,const定义常量,并不是常量的值不得改动,而是常量指向的那个内存地址所保存的数据不得改动。const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

const a = {};
a.name = 'lilei';
a.age = 23;
console.log(a);
a = {}; // Assignment to constant variable;

猜你喜欢

转载自blog.csdn.net/qq_38627581/article/details/82786610