原文
你可能会倾向于将函数声明 function foo(a) {... 概念化为普通的变量声明 和赋值,比如 var foo、foo = function(a) {...。如果这样理解的话,这 个函数声明将需要进行 LHS 查询。
然而还有一个重要的细微差别,编译器可以在代码生成的同时处理声明和值 的定义,比如在引擎执行代码时,并不会有线程专门用来将一个函数值“分 配给”foo。因此,将函数声明理解成前面讨论的 LHS 查询和赋值的形式并 不合适。 --《你不知道的JavaScript(上卷)》
遇到的问题
个人理解
结合原文中另一段话,如下
引擎:我说作用域,我需要为 foo 进行 RHS 引用。你见过它吗?
作用域:别说,我还真见过,编译器那小子刚刚声明了它。它是一个函数,给你。 --《你不知道的JavaScript(上卷)》
这是原文中引擎与作用域的对话,结合最上面那段话,那么思路就比较清晰
我的理解
编译器在生成代码的同时,会处理声明和值的定义
那么在函数的声明中,函数体实际上就是一个函数值,
原文说了在引擎执行代码的时候,并不会有线程专门来将一个函数值分配给一个声明的函数变量
这一步实际上编译器完成了,引擎不会再重复这一步操作,也就不存在什么LHS查询了