var/let/const

156 阅读1分钟

var 声明

var 声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问。因此常称 var 作用域或函数作用域。函数参数也使用函数作用域。
注:多次声明同一个变量不会报错。

let 声明

let 声明一个变量,使用的是词法作用域或块级作用域。
注:

  • 块级作用域变量在包含它们的块或 for 循环之外是不能访问的。
  • 不能在被声明之前或读或写。
  • 直到声明它的代码之前的区域都属于暂时性死区
  • catch 语句里声明的变量也具有同样的作用域规则。
try {
  throw "oh no!";
} catch (error) {
  console.log("error"); // error
}
console.log(error); // 报错
/**
 * Uncaught ReferenceError: error is not defined
    at index.js:71
   (anonymous) @ index.js:71
 */

const 声明

定义常量,被赋值后不能再改变。

解构

解构数组

let input = [1, 2];
let [one, two] = input;
console.log(one); // 1 ===     one = input[0];
console.log(two); // 2 ===     two = input[1];

// 在数组里使用...语法创建剩余变量
let [list1, ...list2] = [1, 2, 3, 4, 5];
console.log(list1); // 1
console.log(list2); // [2, 3, 4, 5]

对象解构

let obj = {
  objName: '张三',
  objSex: '男',
  objAge: 28,
};
let { objName, objSex } = obj;
console.log(objName); // 张三
console.log(objSex); // 男