let、const

⭐ let & const 与 var 的区别?

⭐ 为什么已经有 var 了, 还要再推出 let 和 const

因为 var 存在两个特性或者说问题:

  1. 变量提升
  2. 重复声明(同一作用域下)
  3. if、for代码块中声明外界却可以访问

而 let、const 解决了这些问题:

  1. 声明之前无法使用
  2. 同一作用域下无法重复声明
  3. 使用的是块级作用域,if、for 这样的代码块中不对外界有干扰

⭐ 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?

在 ES5 中,顶层对象的属性和全局变量是等价的,var 命令和 function 命令声明的全局变量,自然也是顶层对象。

var a = 12;
function f() {};
console.log(window.a); // 12
console.log(window.f); // f() {}