我的问题与JS引擎如何实现异步事件的模式有关,当我们在dom上执行类似绑定事件处理程序之类的事情时,我们可以说是单击事件.
他们是否有类似于单独的线程,正在收听所有点击事件?当一个事件确实发生时,他们会引用绑定列表并冒泡事件吗?
类似于Ajax,异步网络调用,浏览器跨越一个新线程,它将开始从服务器监听数据,当收到响应时,它会调用成功处理程序?
v8 spidermonkey event-handling javascript-events javascript-engine
由于 JavaScript 的日益流行,我发现听到(甚至在同一个演讲中)关于 JavaScript引擎、JavaScript虚拟机或 JavaScript解释器,在相同的上下文中并指同一个事物很有趣。
因此,我试图做一些研究,为什么所有这些流行语会同时共存(必须有一个原因),以及它们之间是否存在一些真正的(尽管细微的)差异。
我试图从许多不同的来源(我在以下几行中引用)总结到目前为止我学到的东西。如果我错了/误导了某些东西,请随时纠正我。
虽然我发现它们的运行时职责基本相同,但我也发现了一些主要区别:
进程虚拟机
运行时
语言引擎
问题:
上面的列表是否准确,或者它只是基于使用相同名称的大多数常见运行时系统之间完全巧合的相似性的副产品?
还有其他值得注意的差异吗?
interpreter runtime compilation javascript-engine vm-implementation
我很想知道JavaScript解释器(如果你喜欢引擎)是如何工作的.我知道JavaScript没有编译.我查看了ECMA规范,但它没有解释实际引擎是如何工作的.
我问这个的主要原因是因为我想了解为什么IE7与IE8或Firefox 3.5+的行为略有不同.
我怀疑某些函数调用是以不同的顺序处理的,但我想知道肯定.
我还通过谷歌谈论JavaScript优化以及JavaScript:Good Parts视频观看了一些视频.这些主题简要介绍了这个话题.
谢谢
我正在开发一个将JavaScript源代码转换为目标语言的翻译器.我试图用目标语言实现JavaScript的Math对象.
如果存在"Math"对象的JavaScript实现,我可以使用转换器来获取目标语言中的等效代码.
我正在寻找这样的东西:
var Math = {
pow: function(...) {...}
exp: function(...) {...}
/* other methods of Math */
}
Run Code Online (Sandbox Code Playgroud)
是否有这样的实现可用?这将有助于我避免手动以目标语言编写Math对象的代码.
node.js是一个基于谷歌V8 JavaScript引擎的开源服务器端JavaScript 平台.它已经迅速普及和重要性,现在几年.
现在node.js只是一个平台.从本质上讲,使用的JavaScript引擎只是一个实现细节,任何JS引擎都可以使用,甚至可以用于各种JS引擎的抽象.
Joyent可能选择了V8,因为它是开源的,具有有利的许可条款,并且通常是最快的JS引擎(但我相信它有时被其他引擎取代).
鉴于拥有许多可能被称为"开放标准"的不同但兼容的实现是很好的事情,例如JS引擎,Web浏览器,编程语言编译器等; 当然,拥有像node.js这样的服务器端平台的多个实现也是一件好事
例如,有几乎所有操作系统和硬件都可以运行的JavaScript引擎,但V8仅适用于其中几个.事实证明,微软正在推广用于Windows Azure的node.js,即使它依赖于主要竞争对手的工作,即使他们拥有自己的JS引擎,可以与V8竞争速度.
如果任何此类端口已经开始,我将非常有兴趣跟踪他们的进度以监视node.js是否可能成为开放标准.
•我意识到节点并不像JS和浏览器那样标准化,并且它的发展非常迅速,但这从未阻止任何人搔痒.•如果有多个端口,我不会询问您认为哪个更好或哪个更受欢迎的意见,这不是一个民意调查问题.•我也没有购买node.js实现,我对node.js或类似的东西是否可以作为一个平台普遍采用,或者它是否会留在一家公司手中感兴趣.
javascript platform javascript-engine serverside-javascript node.js
我试图使用phantomjs从网站呈现一个javascript评估的源代码.但每次我尝试我只获得源代码(类似于浏览器的视图源).我真正想要的是javascript评估代码(我们从google chrome浏览器的inspect元素中看到的).我的代码看起来像这样:
var page = require('webpage').create();
page.open('http://www.google.com/', function (s) {
console.log(page.content);
phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?
为方便起见,我编写了一个简单的toJSON原型,用于处理我知道安全的JSON:
String.prototype.toJSON = function () {
return JSON.parse(this.valueOf());
};
Run Code Online (Sandbox Code Playgroud)
我在测试我的网络服务时使用它.不幸的是,即使这个简单的测试
var v0 = '{"echo":"hello_world"}'.toJSON(), v1 = {"echo": "hello_world"};
Run Code Online (Sandbox Code Playgroud)
它失败:
console.log(v0 == v1); // false
console.log(v0 === v1); // false
console.log(v0.echo == v1.echo); // true
console.log(v0.echo === v1.echo); // true
Run Code Online (Sandbox Code Playgroud)
我不知道导致这个问题的JavaScript是什么?
如何在浏览器中确定javascript引擎有几个问题.我必须编写必须在rhino和nashorn上运行的javascript代码.
如何确定我的代码是在rhino还是nashorn上运行?是否存在可以确定引擎的典型函数,变量,常量?
我是编程新手。我正在关注有关 javascript 的教程。但我对 jit 编译器和解释器感到困惑。javscript 是否从源代码转换为字节/本机代码。使用 jit 编译器还是解释器?或者取决于您正在运行的浏览器和 javascript 引擎。
感谢您的回复
想象一下,我们定义了一个像这样的新对象:
const foo = {number1: 1, number2: 2}
Run Code Online (Sandbox Code Playgroud)
这应该定义一个具有这两个属性的新"隐藏类".
现在假设我使用ES6类语法定义了一个新类.
class Numbers {
constructor() {
this.number1 = 1
this.number2 = 2
}
}
Run Code Online (Sandbox Code Playgroud)
然后我从中创建一个新对象.
const bar = new Numbers()
Run Code Online (Sandbox Code Playgroud)
现在的问题是:"隐藏类"是否与隐藏类bar相同foo?
因为我想象的是第一个定义将创建一个具有两个属性的新"隐藏类",但第二个将创建一个新的"隐藏类",然后它将创建一个带有一个属性的新"隐藏类",然后创建还有另一个属性的"隐藏类"导致三个"隐藏类"链接在一起.
有人可以澄清一下吗?如果我的假设是正确的那么新的"ES6类语法"确实更慢.
javascript ×8
interpreter ×2
browser ×1
compilation ×1
es6-class ×1
jit ×1
json ×1
nashorn ×1
node.js ×1
performance ×1
phantomjs ×1
platform ×1
rhino ×1
runtime ×1
spidermonkey ×1
to-json ×1
v8 ×1