gpt4 book ai didi

JavaScript 是编译型语言还是解释型语言,还是两者兼而有之?

转载 作者:行者123 更新时间:2023-12-03 21:07:24 25 4
gpt4 key购买 nike

我很抱歉这个愚蠢的问题,但我对此感到困惑。
我一直在阅读 you don't know JS yet书和书说

JS is most accurately portrayed as a compiled language.


他们用一些例子解释这对我来说很有意义
但是当我在互联网上搜索时。大多数人认为 JS 是一种解释型语言。
我读到 JS 引擎使用多种技巧来处理 JIT、热重新编译等 JS 程序。
那么我应该认为 Javascript 既是编译语言又是解释语言?

最佳答案

更新:
当 JavaScript 在 1995-96 年首次出现时,Brendan Eich 创建了第一个 JS 引擎,称为 spider-monkey(仍在 Mozilla Firefox 中使用)。在这个时候,JavaScript 是在考虑浏览器的情况下创建的。这样任何来自服务器的文件都会被浏览器快速解释和显示。

Interpreter was a best choice to do so, since Interpretersexecutes code line by line and shows the results immediately.


但随着时间的推移,性能成为一个问题,它变得越来越慢。解释器的问题在于,当您在这样的循环中一遍又一遍地运行相同的代码时:
const someCalculation = (num1, num2) => {
return num1 + num2;
};

for (let i = 0; i < 10000; i++) {
someCalculation(5, 6); // 11
}
它可以变得非常非常慢。

So the best option was introducing the Compiler,


这实际上对我们有帮助。启动需要更多时间,因为它必须在一开始就经过编译步骤 - 浏览我们的代码,理解它并将其翻译成另一种语言。但是编译器会足够聪明。当它看到上面的代码时(我们循环,它有相同的输入,返回相同的输出),它实际上可以简化这段代码,而不是多次调用这个函数,它可以用输出替换这个函数功能。像这样的东西。
const someCalculation = (num1, num2) => {
return num1 + num2;
};

for (let i = 0; i < 10000; i++) {
11; // And it will not call someCalculation again and again.
}
因为编译器不会为该循环中的每次传递重复翻译,所以从它生成的代码实际上更快。

And these sorts of edits that Compilers do are called Optimizations


因此,Javascript 结合了解释器和编译器,以得到两全其美的效果。因此,浏览器开始混合称为 JIT-Compilers 的编译器进行即时编译,以使引擎更快。
V8-Engine
在图片中您可以看到 剖析器 它会监视重复的代码并将其传递给代码优化编译器。

This means that the Execution Speed of Javascript Code that we enteredinto the engine is going togradually improve because the Profiler and Compiler are constantlymaking updates and changes to our Byte code in order to be asefficient as possible. So Interpreter allows us to run the code rightaway while Profiler and Compiler allows us to optimize this code aswe are running.


现在让我们得出一些结论:
现在我们知道了 JS-Engine 是如何在底层工作的,作为程序员,我们可以编写更多的优化代码 - 编译器可以比我们的常规 Javascript 更快地获取和运行它的代码。 然而 ,
我们需要确保我们不会混淆这个编译器——因为编译器并不完美,它可能会出错,它可能会尝试优化正好相反的代码。如果它犯了一个错误并且做了一些意想不到的事情,它就会做一些叫做 的事情。去优化这需要更长的时间才能将其还原回解释器。
现在是大问题: Javascript 是解释性语言吗?
回答 :是的,最初当 Javascript 刚出现时,你有一个 Javascript 引擎,例如由 Brenden Eich 创建的 spider-monkey,它将 javascript 解释为字节码,并且这个 Javascript 引擎能够在我们的浏览器中运行,告诉我们的计算机该做什么.
但是现在事情已经发展了,我们不仅有解释器,我们还使用编译器来优化我们的代码。所以,这是一个普遍的误解。

When someone says Javascript is an interpreted language, yes there issome truth to it but it depends on the implementation. You can make animplementation of Javascript Engine that perhaps only compiles.Technically it all matters depending on the implementation.

关于JavaScript 是编译型语言还是解释型语言,还是两者兼而有之?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65697629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com