JavaScript引擎虚拟机运行时环境是一回事儿吗?

JavaScript015

JavaScript引擎虚拟机运行时环境是一回事儿吗?,第1张

js引擎通常被称作一种虚拟机(可能是js并没有明确的VM的概念吧),是专门用来解释和执行js脚本的。js虚拟机是一种进程虚拟机,就是能运行一个进程或程序。每个js引擎都实现了ECMAScript规范(当然,有的实现并不全或者未能实现最新规范)ActionScript也支持这种规范。早期的js脚本只包含很简单的逻辑,所以处理js脚本的引擎性能自然也好不到哪里去,非常早期的“Mocha”引擎只包含字节码解释器、引用计数方式的自动内存管理方式。js引擎从原始的遍历语法树,到字节码方式到引入JIT编译方式(即时编译),性能得到了质的飞跃  。现如今一些比较知名的js引擎有:SpiderMonkey, Mozilla的JavaScript 引擎,使用C/C++编写;V8(第一个用上JIT技术的虚拟机),chrome的js引擎,使用C++/汇编  编写,使用初级编译器 + 优化编译器。还有Safari的JavaScriptCore引擎,IE/Edge的Chakra引擎。当然,Node.js/IO.js也是使用V8引擎(虚拟机)。参考:game-server-development/node.js-V8引擎相关的性能优化.md at master · xiecc/game-server-development · GitHub runtime 翻译过来就是“运行时”,或者运行时环境,是说一个程序正在执行的状态,js runtime就是运行js的环境,也就是虚拟机(engine)。runtime它的底层可能是一些标准库函数。js引擎和虚拟机存在相似之处,但有足够的差异,因为JavaScript的动态特性。

```js

// 创建vue实例。

var vm = new Vue()

// 创建事件监听 @params 监听的事件名 回调函数。

vm.$on('start', function (params) {

console.log(params + ',我让start 事件触发了')

})

// 主动触发事件,此时会触发监听的回调(我们打印的代码就会运行) @params 触发的事件名 传递的参数。

vm.$emit('start', '我是触发传递的参数')

```

Vue的$on就和addEventListener差不多,是创建一个事件监听,

$emit 就和自定义事件一样,你主动创建了一个事件,并且让这个事件触发了。

一般用来vue非父子组件之间传递数据(Vue的bus)

也困惑了了很久这个问题,根据查看源码得知,错误的原因是这个vm实例没有指定el挂载点。

而且官网下载的vue.js使用$appendTo方法,如果传递id,class,html选择器过去的话,始终会得到null,而传递dom对象是可以的。