Javascript 中'compile time'的等效术语



术语编译时用于编译语言(如C++(,以指示源代码正在经历编译过程的时间点。

术语"运行时"用于指示用户打开和运行应用程序的点。

例如,如果我们编写了一个简单的游戏,根据一些顶点列表渲染地形......如果此地形数据是从服务器获取的,我可能会说地形的状态在运行时之前是未知的。但是,如果设想我们只有一个地形"模型",并直接在源代码中进行配置,我可能会说地形的状态在编译时是已知的(我这样说会错吗?

在Javascript中,编译时的等效术语是什么?我自己的解决方案是称之为设计时,但是我很想知道是否有正确的术语。

在您的示例中,仅说它是">硬编码"可能更有意义,因为这似乎对您描述的内容更准确。硬编码的东西在编译时总是已知的,但在编译时知道的东西不一定是硬编码的(例如,在C++中,它们可以使用 constexpr 函数生成,或使用构建参数注入(。

在Javascript中最接近"编译时"的东西,我可能会称之为"构建",因为在Javascript中你经常有某种构建步骤,无论是使用WebPack的重量级构建过程,只是简单的缩小,甚至只是将应用程序文件的特定版本收集到某种可分发的包中。即使你实际上根本没有执行这样的步骤,我认为人们通常会理解这是什么意思。

取决于实现,但某些引擎具有"实时"(JIT( 编译。 请参阅 JavaScript Just In Time 编译。

但是,作为代码编写者(而不是引擎(可以执行的操作主要限于捆绑和缩小,以减少获取运行程序所需的所有脚本。

最接近的比较可能是如何在编译语言中动态和静态链接。

在 Javascript 中没有真正的等价物"编译时"。

例如,指代"提升"或没有赋值的变量声明的常用术语是"创建阶段"(相对于"执行阶段"(。

这很好地解释了和理解javascript。然而,并不一定真的有这样一个特定的"阶段"发生。

语言规范 ECMA-262 也不使用这些术语。相反,它只使用相对术语,即它指定在其他事情之前或之后应该发生什么,并且显然将实现留给引擎开发人员。

例如,在互联网上通常以这样的方式解释:

VaR 在"创建阶段"声明,并在"执行阶段"中生效

但 ECMA 只是这样指定它:

变量 (/let/const/...( 是在 X 时创建的,但只要 Y、...(但可能要到 Z 才能访问...

此类相对术语的示例:

ECMA-262,第 11 章,第 13.3.2 章:

var 变量是在实例化其包含的词法环境时创建的 ...
...被分配了值...当执行变量声明时,不 创建变量时

ECMA-262,第 11 章,第 8.1 章:

每次计算此类代码时都会创建一个新的词法环境

最新更新