块级作用域
块级作用域解决的问题
内存变量对外层变量的覆盖
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = 'hello world'; } } f(); // undefined
提示:内部代码块变量提升,覆盖外部代码块的变量
变量泄露成全局变量(for遍历计数器)
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5
提示:循环之后,变量i并没有消失,泄露成了全局变量
块级作用域的优势
外层代码不受内部影响
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5 }
提示:外部代码块不受内部影响,
let n = 5
绑定内部代码块允许块级作用域任意嵌套
内层作用域可以定义外层作用域的同名变量,每一层都是一个单独块级作用域
块级作用域使得立即执行函数不再那么重要
// IIFE 写法 (function () { var tmp = ...; ... }()); // 块级作用域写法 { let tmp = ...; ... }