所谓的块级作用域,可能是一个
{}
,一个代码块,一句话
let关键字
let 与 var 区别
区别 | var | let |
---|---|---|
变量提升 | 有 | 无 |
作用域 | 全局作用域、函数作用域 | 全局作用域、函数作用域和块级作用域 |
提前声明 | 有 | 无 |
重复声明 | 有 | 无 |
重新赋值 | 有 | 有 |
let或const没有声明提前,相当于
暂时性死区(TDZ)
与函数的关系
var
var v = 100;
function fn() {
console.log(v);// undefined
var v = 1000;
console.log(v);// 1000
}
fn();
let
let v = 100;
function fn() {
// 函数作用域封闭–全局作用域中的变量与当前函数作用域无关
console.log(v);// Cannot access 'v' before initialization
let v = 1000;
console.log(v);// 1000
}
fn();
使用let关键字全局的变量和当前的无关(
封闭
)
块级作用域
块级作用域只能用
let
关键字,但是let
关键字用在全局作用域、函数作用域、块级作用域中
为什么需要块级作用域
-
局部变量可能覆盖全局变量
-
在循环体中用于计数的变量泄露为全局变量
循环语句与数组的关系
var arr = [];
for (var i = 0; i < 10; i++){
arr[i] = function () {
return i
}
}
console.log(arr);