函数与块级作用域
作用域
如何在某些位置存储变量,以及如何在稍后找到这些变量
什么结构可以创建作用域气泡?
- 函数
- 块级作用域
- with
- try/catch
- let
- const
let/const
let
关键字将变量声明附着在它所在的任何块儿(通常是一个 { .. }
)的作用域中。
换句话说,let
为它的变量声明隐含地劫持了任意块儿的作用域。
var foo = true;
if (foo) {
let bar = foo * 2;
bar = something( bar );
console.log( bar );
}
console.log( bar ); // ReferenceError
let
定义的 bar
被限定在 {...}
中
块级作用域一些作用
闭包和释放内存的垃圾回收
垃圾回收
function process(data) {
// 做些有趣的事
}
// 运行过后,任何定义在这个块中的东西都可以消失了
{
let someReallyBigData = { .. };
process( someReallyBigData );
}
var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt){
console.log("button clicked");
}, /*capturingPhase=*/false );
let
循环
for (let i=0; i<10; i++) {
console.log( i );
}
console.log( i ); // ReferenceError