原文
你可能会倾向于将函数声明 function foo(a) {... 概念化为普通的变量声明 和赋值,比如 var foo、foo = function(a) {...。如果这样理解的话,这 个函数声明将需要进行 LHS 查询。
然而还有一个重要的细微差别,编译器可以在代码生成的同时处理声明和值 的定义,比如在引擎执行代码时,并不会有线程专门用来将一个函数值“分 配给”foo。因此,将函数声明理解成前面讨论的 LHS 查询和赋值的形式并 不合适。 --《你不知道的JavaScript(上卷)》
遇到的问题
为什么函数声明就不是LHS查询,不太理解原文提示中的解释
个人理解
结合原文中另一段话,如下
引擎:我说作用域,我需要为 foo 进行 RHS 引用。你见过它吗?
作用域:别说,我还真见过,编译器那小子刚刚声明了它。它是一个函数,给你。 --《你不知道的JavaScript(上卷)》
这是原文中引擎与作用域的对话,结合最上面那段话,那么思路就比较清晰
我的理解
编译器在生成代码的同时,会处理声明和值的定义
那么在函数的声明中,函数体实际上就是一个函数值,
原文说了在引擎执行代码的时候,并不会有线程专门来将一个函数值分配给一个声明的函数变量
这一步实际上编译器完成了,引擎不会再重复这一步操作,也就不存在什么LHS查询了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。