日期:2014-05-16  浏览次数:20372 次

学习闭包的时候 ,接触到了语法分析树(SyntaxTree)概念,有一点不明
语法分析树(SyntaxTree)的概念是JS引擎创建了一些表,用来记录每个方法内的变量集(variables),方法集(functions)和作用域(scope)等 

请问比如这个嵌套函数
var x=1
function a(){
  var y=2
  function b(){
  var z=3  
  }
}
请问在没有发生任何函数调用的时候,js就已经创建了函数b的语法分析树了吗,也就是说js解析器已经知道局部变量b的存在是吗?

------解决方案--------------------
不是的,是执行a的时候才会解析function b,即创建b,且b有个[[scope]]属性会指向a的运行时环境