Javascript是编译还是两遍解释?

时间:2011-08-31 02:56:27

标签: javascript functional-programming

我是新手JavaScript程序员,我正在尝试了解更多信息。所以我转向大家寻求帮助,这个简单的问题:)。我正在阅读的O'Reilly书籍一直指的是JavaScript代码的编译时间。我对函数式编程(方案等)的了解告诉我,JavaScript实际上是由浏览器解释的,很可能需要两遍JavaScript。

我的评估不正确吗?或者本书引用的编译时实际上只是解释器的第一次传递,类似于Perl或Python的工作方式?谢谢!

3 个答案:

答案 0 :(得分:11)

它取决于浏览器。查看WebKit的SquirrelFish Extreme和Google V8,了解最快的结果,并查看Mozilla的JaegerMonkey,了解该实现。

AFIAK V8和SFX是JIT,因此他们将JS代码编译为native。 JaegerMonkey和TraceMonkey在Firefox中结合形成一个系统,如果代码更快地跟踪,TraceMonkey执行它,如果代码更快,JaegerMonkey就像SFX一样编译它。

答案 1 :(得分:0)

你有句话可以引用以帮助上下文吗?

Javascript在浏览器中编译(它以普通源的形式发送到浏览器)。但它只会在加载时编译。因此,如果您有一个脚本标记后跟一个div标记,后跟一个脚本标记,那么它将按顺序加载这些内容。浏览器将停止加载整个页面(它仍然下载资源,只是不加载HTML),直到你的脚本被加载(这是因为脚本中可能有'document.write')。

<script>
var someVariable = 'hello world';
alert(document.getElementById('someid')); //alerts undefined
</script>

<div id='someid'></div>

<script>
alert(document.getElementById('someid')); //alerts 'someid'
alert(someVariable); //alerts 'hello world'
</script>

答案 2 :(得分:0)

在JS中有读取时间和运行时(因为我喜欢它,因为它不是真正编译的,而是解释的)。听起来O'Reilly的书正在使用编译时作为阅读时间的同义词。

读取时间是指引擎读取所有代码并评估全局范围内的所有内容。通常这会在触发代码执行的事件上设置挂钩。

运行时间就是其他一切。