CNode

node中的require和exports

Lleexiaosi发布于15 年前最后回复10 年前8 回复22394 浏览0 收藏
查看回复

回复 (8)

Y
yongningfu#1·10 年前

每个模块都是一个对象 而且这个对象在整个项目中都是同一个 它只会初始化一次 就是第一次require的时候

A
anonymous#2·15 年前

最近也剛好有機會用到nodejs 看到你的Blog覺得很棒 不過我不太懂您的阻塞跟非阻塞的意思, 請問有無英文單字可供參考? 謝謝您

R
rogical#3·15 年前

光是这个问题,其实很好回答, 如var express = require('express'), 这个require必然是阻塞的,不然后面就没法调用到 express了。

M
mad#4·15 年前

最近我也在看相关内容,补充一下。 nodejs的环境变量 NODE_MODULE_CONTEXTS。 默认情况下它为0,表示module不使用独立的context。 设置为1,表示为每个module创建独立的context。 一般我们没有设置,也就是默认情况,nodejs为module创建了闭包环境 lz说的情况主要是指这个默认情况下。 对于 var a = "foo"; 这两种情况没有什么区别。 但 a = "foo" 就有明显区别了,默认情况下a将成为全局变量。而=1时a仍然是局部变量。

M
mad#5·15 年前

最近我也在看相关内容,补充一下。 nodejs的环境变量 NODE_MODULE_CONTEXTS。 默认情况下它为0,表示module不使用独立的context。 设置为1,表示为每个module创建独立的context。 一般我们没有设置,也就是默认情况,nodejs为module创建了闭包环境 lz说的情况主要是只这个默认情况下。 对于 var a = "foo"; 这两种情况没有什么区别。 但 a = "foo" 就有明显区别了,默认情况下a将成为全局变量。而=1时a仍然是局部变量。

P
pengchun#6·15 年前

翻源码找答案的人伤不起啊!支持

A
anonymous#7·15 年前

謝謝你的回答, 清楚許多^^ thanks

A
anonymous#8·15 年前
引用 anonymous最近也剛好有機會用到nodejs <br/ <br/ 看到你的Blog覺得很棒 <br/ <br/ 不過我不太懂您的阻塞跟非阻塞的意思, 請問有無英文單字可供參考? <br/ <br/ 謝謝您

我英文不太好 阻塞应该是blocking 非阻塞应该是nonblocking. 其实是这样的,例如核心脚本,在lib下的node脚本,如module,fs,http等,其编译后的存储是使用的json对象,来避免文件的读写,即形式如{"module":"...","http":"..."},会伴随着node.exe一起加载,require核心模块是不涉及到IO读写的,但是非核心脚本,存在着IO读写,但关键是,无论是核心模块还是非核心模块的脚本都是使用了js中类似"eval"的 process.binding("evals").NodeScript.runInThisContext来解析,解析必然是阻塞的

参与回复
登录后即可参与回复。登录