词法分析时机
// 先按照之前理解的“词法分析”概念来讨论
错误的理解:词法分析是在执行函数的定义代码时(创建时/函数的外层代码执行时)进行
正确的理解:词法分析是函数每调用一次,就进行一次,只是前置于执行阶段,应该分开看待
影响的点:如果在只在执行定义代码时执行一次,那么从哪里来获取传入的实参、参数默认值又怎么避免共用
补充:什么过程是函数定义(创建)时执行一次的呢?——保存函数外层的作用域链(对应的内部属性叫[[scope]])
什么才是“词法分析”
之前理解的“词法分析”过程应该叫做“进入执行上下文”或者“变量对象的建立”,这个过程不具有静态性(因为是调用时才进行)。那么真正的“词法分析”过程,是不是应该包括函数创建时外层作用域链[[scope]]的建立过程,加上函数调用时复制一份[[scope]],并且把变量对象放到作用域链最尾部,形成最终作用域链的过程。这个过程的静态性在于[[scope]]的建立。
参考:https://github.com/mqyqingfeng/Blog 2、3、4、5、7
发现3号文章的第一条评论,就是关于这个错误。
孟晴晨
讲得非常好,声音很有磁性