[译]ES6特性
原文 作用域 使用 let / const 替代 var 。 var 有什么错? var 说明的变量会产生作用于提升的概念。 ES5: var x = 'outer'; function test(inner) { if (inner) { var x = 'inner'; // scope whole function return x; } return x; // gets redefined because line 4 declaration is hoisted } test(false); // undefined 😱 test(true); // inner test(false) 返回的是 undefined 而不是 outer 。 为什么? 因为if-block没有执行,第四行的 var x 被提升了。 提升后,上面的代码变成了下面的样子: var x = 'outer'; function test(inner) { var x; // 提升到了 if (inner) { x = 'inner'; // 初始化没有提升 return x; } return x; } ES6中可以这样解决这个问题: let x = 'outer'; function test(inner) { if (inner) { let x = 'inner'; return x; }