调用栈是 V8 的一部分。 调用栈在 V8 中是一个数据结构,用于追踪方法的调用。 每次调用一个函数时,V8 都会在调用栈中引用该函数。并且每次调用其他函数都会如此(包括递归调用的函数)。
当函数调用结束时 V8 将 Pop 该函数并且在函数调用处返回他的值。
了解这个很重要,因为每一个 Node 进程只会有一个调用栈,如果你的调用栈处于繁忙,那么你的这个 Node 进程便处于繁忙。
事件循环处在下图中的哪个模块?
事件循环是由 libuv 库提供的,它不是 V8 的一部分。
event loop 用于处理外部事件并且将其转化为回调,它会从事件队列中选择事件并将其事件回调 push 到调用栈中。
事件循环位于这张照片的中间,并且像一个组织者一样。当V8调用堆栈为空时,事件循环可以决定下一步执行什么。
它只会退出。
当您运行 Node 程序时,Node 将自动启动事件循环,当该事件循环处于空闲状态并且没有任何其他操作时,该进程将退出。为了保持 Node 进程的运行,您需要在某个事件队列中放置某些东西。例如,当您启动计时器或 HTTP 服务器时,相当于告诉事件循环继续运行并检查这些事件。
以下是 Node 进程用到的依赖库:
他们都是 Node 所用到的依赖库,他们有自己的源码,协议。 Node 只是使用了他们。所以如果你正在进行数据压缩并且报错了,不要怪 Node。
这可能是一个棘手的问题。您需要一个 VM 来运行 Node 进程,但 V8 不是唯一可以使用的VM。你还可以使用 Chakra。
你可以使用 module.exports 导出模块的 API,当然你也可以使用 exports。
module.exports.g = ... // Ok
exports.g = ... // Ok
module.exports = ... // Ok
exports = ... // Not Ok
export 只是 module.exports 的引用或者别名。真正起作用的是 module.exports ,如果给 exports 重新赋值,那么 exports 和 module.exports 将不再有关系。
如果你有 module1 定义了顶级变量 g:
// module1.js
var g = 42;
如果在 module2 require module1 并尝试访问变量 g,你会得到 g is not defined 的错误。
但是如果你在浏览器中执行相同的操作,则可以访问所有 scirpt 的顶级变量(已经定义过的),
每个 Node 文件都有一个自己的IIFE(即时调用函数表达式)。在 Node 文件中声明的所有变量都被限定在 IIFE 中。
相关问题:运行如下 Node 文件输出的是什么?
// script.js
console.log(arguments);
你会看到一些参数:
因为 Node 执行的是一个函数。Node 用一个函数包装你的代码,该函数显式地定义了如上五个参数。
当您需要使用 require 对象时,您只需直接使用它,就像它是一个全局变量一样。但是,如果您在两个不同的文件中检查他们,您将看到两个不同的对象。怎么会这样?
同样是因为 IIFE:
如上所示,IIFF 将传递给您的代码以下五个参数:exports,require,module,__filename 和__dirname。当您在 Node 中使用这些变量时,这五个变量似乎是全局变量,但它们实际上只是函数参数。
如果你有一个 module1,module1 require module2 和 module2 反过来require module1,会发生什么?会报错吗?
// module1
require('./module2');
// module2
require('./module1');
这样并不会报错。Node 允许这种操作。
所以 module1 require module2,但是由于module2 require module1 (此时 module1 还没有完成),module1 只会得到 module2 的部分版本。
这样会被警告。
Node 中的每个 fs 方法都具有同步版本。为什么要使用同步方法而不是异步?
有时使用同步方法是个很好的选择。例如,它可以在服务器仍在加载的初始化中使用。使用同步方法是可以接受的,只要你使用同步方法是一次性的事情(像 Http 请求这种多次回调的肯定是错误的)。
原文来自:HuminiOS专栏
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。
结合权威身份认证的精准人脸风险查询服务,提升人脸应用及身份认证生态的安全性。人脸风险情报库,覆盖范围广、准确性高,数据权威可靠。
全国城市和站点空气质量查询,污染物浓度及空气质量分指数、空气质量指数、首要污染物及空气质量级别、健康指引及建议采取的措施等。
输入手机号和拦截等级,查看是否是风险号码