ES6之变量声明

125 阅读1分钟

ES6 之前

var age = 20;

JS 引擎解析过程

var age; //提升到头部
age = 20;

// 所以一下代码是可以被成功运行的
name = 'wang';
var name;

// 以下为变量提上的场景
console.log(a); // undefuned
var a = 20;
// 上述代码等于
var a;
console.log(a);
a = 20;

ES6

let:特点

  1. 不可前置声明
// 合理做法
let age = 20;

// 不合理(var区别)
age = 20;
let age;
  1. 不可重复声明
// 使用 var
var a = 5;
var a = 3; // √
// 使用 let 
let a = 5;
let a = 3; // ×
  1. 存在块级作用域
for(let i=0; i<3; i++) {
    console.log(i);
}
console.log(i); // 错误
  1. 无法用 window 访问
var a = 3;
let b = 4;
window.a; // 3
window.b; // 错误

const用法:

let 的常见用法在 const 都有体现

不同之处

  1. 不能先声明再赋值
const a;
a = 20; // 这是不被允许的
  1. 声明后不可修改
const a = 4;
a = 5; // 错误

PS: 对象尤其值得注意

const obj = {x:20};
obj = {a:20}; // 错误
// 原因: {x:20} 与 {a:20} 在内存中都占据了一块内存, 
// 上述复制语句实际上是将内存地址赋值给 obj 实质上是改变了 obj 的值

obj.x = 10; // 正确
// 原因: obj 的值无变化,是通过 obj 存储的地址找到这块内存,然后修改这块内存里的东西