作用域
变量 变量的存储 作用域 编译原理:分词/词法分析,解析/语法分析,代码生成
AST(Abstract Syntax Tree)
闭包
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行
function foo () {
var a = 2
function bar () {
console.log(a) // 2
}
return bar
}
var baz = foo()
baz() // 2 朋友,这就是闭包的效果
本质上无论何时何地,如果将(访问它们各自词法作用域的)函数当作第一级的值类型并到处传递,你就会看到闭包在这些函数中的应用。在定时器,事件监听器,Ajax请求,跨窗口通讯,web workers或者任何其他的异步(或者同步)任务重只要使用了回调函数,实际上就是在使用闭包