-
作用域块有啥用
- 防止变量污染,防止内部变量泄漏成全局变量
- 防止变量覆盖,内层的变量会覆盖外层变量
-
es6的块级作用域
- 块级作用域可以代替匿名立即执行函数
// IIFE 写法 (function () { var tmp = ...; ... }()); // 块级作用域写法 { let tmp = ...; ... }
- 下面代码在es5中结果为"I am inside!",因为在
if
内声明的函数f
会被提升到函数头部;es6中为”f is not a function“,行为类似于var
声明的变量。
function f() { console.log('I am outside!'); } (function () { if (false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f(); }());
-
函数及变量声明必须位于当前作用域的顶层
// 第一种写法,报错 没有大括号,所以不存在块级作用域
if (true) let x = 1;
// 第二种写法,不报错
if (true) {
let x = 1;
}
// 不报错
'use strict';
if (true) {
function f() {}
}
// 报错
'use strict';
if (true)
function f() {}