js实现let
let 在 JavaScript 中的实现
let 是 ES6 引入的块级作用域变量声明方式,用于替代 var 的部分功能。以下是其核心特性和实现方式:
块级作用域
let 声明的变量仅在当前代码块(如 {} 内部)有效,而不会像 var 那样存在变量提升或泄漏到全局作用域。
{
let x = 10;
console.log(x); // 输出 10
}
console.log(x); // 报错:x is not defined
暂时性死区(TDZ)
在变量声明前访问 let 声明的变量会触发错误,即使外层作用域有同名变量。
let y = 20;
{
console.log(y); // 报错:Cannot access 'y' before initialization
let y = 30;
}
禁止重复声明
同一作用域内不允许重复声明同名 let 变量。
let z = 1;
let z = 2; // 报错:Identifier 'z' has already been declared
循环中的表现
在循环中使用 let 会为每次迭代创建新的绑定,解决 var 导致的闭包问题。
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100); // 输出 0, 1, 2
}
实现原理
Babel 等工具会将 let 转换为 ES5 代码,通过闭包模拟块级作用域:

// 转换前
let a = 1;
{
let a = 2;
}
// 转换后
var a = 1;
(function () {
var a = 2;
})();






