javascript如何成为一种同步语言并在浏览器和node.js环境中异步运行
How can javascript be a synchronous language and run asynchronously in browser and in node.js enviroment?
我的意思是实际的区别是什么?我知道Google v8引擎在浏览器和node.js环境中都对它进行了解释?那么我在这里错过了什么?同一个代码如何以不同的方式执行?
同一种语言怎么能同时同步和异步呢?
javascript如何在浏览器中同步运行,在Node.js环境中异步运行?
事实并非如此。它在两种环境中都以单线程*、事件驱动的方式运行。当处理一个任务(例如,对发生的事情做出响应)时,该线程会同步执行任务。它可以做的一件事(在这两种环境中)是安排在当前任务完成后处理异步回调。
同一种语言怎么能同时同步和异步呢?
同步处理与异步处理主要是环境问题,而不是语言问题。有些语言的功能旨在使其更容易在多线程环境中使用(与同步/异步语言不同),有些语言可能内置了异步功能,但如果该语言没有(JavaScript也没有),则环境可以提供这些功能。
例如:JavaScript没有内置的方法来安排异步回调**。但浏览器提供的setTimeout
函数正是这样做的(Node也提供nextTick
和其他各种功能)。
*除了浏览器可以通过web工作程序启动多个线程之外(节点代码可以生成子进程)。
**ES6的承诺将改变这一现状解析或拒绝ES6承诺本质上是一种异步操作(此处、此处和此处详细介绍)。
相关文章:
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- Node.js服务器和浏览器之间共享二进制缓冲区
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 编写在浏览器和node.js中运行的模块化ECMAScript
- 为什么我不能在 node.js(浏览器化)的 require() 函数中使用变量作为参数
- javascript如何成为一种同步语言并在浏览器和node.js环境中异步运行
- 正则表达式在浏览器上有效,但在Node.js中无效
- 在Node.js和浏览器上拦截(mock)http请求
- Node.js,并将数据发送回所有浏览器选项卡
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- Node.js - 禁用浏览器的 Javascript
- 在 Node.js 中运行浏览器 JS
- Node.js/Socket.io 中的 Web 套接字支持,适用于旧版浏览器
- node.js是否等同于浏览器中的窗口对象
- 如何为具有自动浏览器+丑化的浏览器提供 node.js 代码
- 为 Node 和浏览器构建 AMD 代码
- Node.js API 在终端中返回 JSON,但不在浏览器中返回 JSON
- 浏览器中的 Node's net.connect()
- 如何从node-webkit应用程序打开浏览器窗口
- Node.js selenium webdriver - 在测试中获取浏览器功能