'的等效术语;编译时&x27;在Javascript中

'的等效术语;编译时&x27;在Javascript中,javascript,terminology,Javascript,Terminology,术语编译时用于编译语言(如C++),表示源代码在编译过程中所处的位置 术语runtime用于指示用户打开和运行应用程序的时间点 例如,如果我们写了一个简单的游戏,它根据一些顶点列表渲染地形。。。如果这个地形数据是从服务器获取的,我可以说地形的状态在运行时之前是未知的。然而,如果设想我们只有一个地形“模型”,并直接在源代码中配置,我可能会说地形的状态在编译时就知道了(我这样说会错吗?) 在Javascript中,编译时的等效术语是什么?我自己的解决方案是将其称为设计时,但我想知道是否有正确的术语。

术语编译时用于编译语言(如C++),表示源代码在编译过程中所处的位置

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

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


在Javascript中,编译时的等效术语是什么?我自己的解决方案是将其称为设计时,但我想知道是否有正确的术语。在您的示例中,仅说它是“硬编码”可能更有意义,因为这对于您所描述的内容似乎更准确。在编译时总是知道硬编码的东西,但是编译时已知的东西不一定是硬编码的(例如C++中,它们可以用CONTHEXPR函数生成,或者使用构建参数注入)。
在Javascript中最接近“编译时”的东西我可能会称之为“构建时”,因为Javascript中通常有一些构建步骤,无论这是使用WebPack的重量级构建过程,还是简单的缩小,甚至只是将应用程序文件的特定版本收集到某种可分发的包中。即使您实际上根本没有执行这样的步骤,我想人们通常也会理解这是什么意思。

取决于实现,但有些引擎有“即时”(JIT)编译。看

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

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

Javascript中没有真正的“编译时”等价物

例如,“提升”或无赋值变量声明的常用术语是“创建阶段””(vs.“执行阶段”)

这可以很好地解释和理解javascript。然而,不一定真的有这样一个特定的“阶段”发生

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

例如,互联网上常见的解释方式如下:

var在“创建阶段”声明,并在“执行阶段”恢复

但ECMA仅以如下方式指定:

变量(/let/const/…)是在X时创建的,但只要Y。。。(但在Z,…)之前不得访问)

此类相关术语的示例: ECMA-262,第11章,第13.3.2节:

Var变量是在实例化其包含词法的环境时创建的…
... 已指定值。。。执行VariableDeclaration时,不是 创建变量时

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

每次对此类代码求值时,都会创建一个新的词汇环境


由于JavaScript是一种解释语言,而不是编译语言,
执行时间
在JavaScript(imo)中应该是一个适当的等价物。我认为,既然没有什么可编译的东西,如果您有一个将数据捆绑到代码中的构建步骤,那么它将只是脚本的
加载时间
,可以肯定地说这是一个编译步骤。这取决于实现,但有些引擎有“即时”(JIT)编译。看见