你不知道的javaScript

79 阅读1分钟

作用域

变量 变量的存储  作用域 编译原理:分词/词法分析,解析/语法分析,代码生成

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或者任何其他的异步(或者同步)任务重只要使用了回调函数,实际上就是在使用闭包