JavaScript let 和 var 的作用域

作用域这块我始终没有搞清楚 :woman_facepalming:

let 声明的变量只在 let 命令所在的代码块内有效。

var a = 99;            // 全局变量a
f();                   // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。 
console.log(a);        // a=>99,  此时是全局变量的a
function f() {
  console.log(a);      // 当前的a变量是下面变量a声明提升后,默认值undefined
  var a = 10;
  console.log(a);      // a => 10
}

// 输出结果:
undefined
10
99
{ 
  var i = 9;
} 
console.log(i);  // 9
{ 
  let i = 9;     // i变量只在 花括号内有效!!!
} 
console.log(i);  // Uncaught ReferenceError: i is not defined
1赞

哈哈 我也是 多写写就熟练了吧(只能这么想 :joy: