1.1《你不知道的JavaScript(上卷)》之LHS / RHS 中函数声明属于什么查询

前端之家收集整理的这篇文章主要介绍了1.1《你不知道的JavaScript(上卷)》之LHS / RHS 中函数声明属于什么查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文

你可能会倾向于将函数声明 function foo(a) {... 概念化为普通的变量声明 和赋值,比如 var foo、foo = function(a) {...。如果这样理解的话,这 个函数声明将需要进行 LHS 查询
然而还有一个重要的细微差别,编译器可以在代码生成的同时处理声明和值 的定义,比如在引擎执行代码时,并不会有线程专门用来将一个函数值“分 配给”foo。因此,将函数声明理解成前面讨论的 LHS 查询和赋值的形式并 不合适。 --《你不知道的JavaScript(上卷)》

遇到的问题

为什么函数声明就不是LHS查询,不太理解原文提示中的解释

个人理解

结合原文中另一段话,如下

引擎:我说作用域,我需要为 foo 进行 RHS 引用。你见过它吗?
作用域:别说,我还真见过,编译器那小子刚刚声明了它。它是一个函数,给你。 --《你不知道的JavaScript(上卷)》

这是原文中引擎与作用域的对话,结合最上面那段话,那么思路就比较清晰

我的理解

编译器在生成代码的同时,会处理声明和值的定义
那么在函数的声明中,函数体实际上就是一个函数值,

原文说了在引擎执行代码的时候,并不会有线程专门来将一个函数值分配给一个声明的函数变量
这一步实际上编译器完成了,引擎不会再重复这一步操作,也就不存在什么LHS查询

原文链接:https://www.f2er.com/js/413991.html

猜你在找的JavaScript相关文章