回复 (8)
每个模块都是一个对象 而且这个对象在整个项目中都是同一个 它只会初始化一次 就是第一次require的时候
最近也剛好有機會用到nodejs 看到你的Blog覺得很棒 不過我不太懂您的阻塞跟非阻塞的意思, 請問有無英文單字可供參考? 謝謝您
光是这个问题,其实很好回答, 如var express = require('express'), 这个require必然是阻塞的,不然后面就没法调用到 express了。
最近我也在看相关内容,补充一下。 nodejs的环境变量 NODE_MODULE_CONTEXTS。 默认情况下它为0,表示module不使用独立的context。 设置为1,表示为每个module创建独立的context。 一般我们没有设置,也就是默认情况,nodejs为module创建了闭包环境 lz说的情况主要是指这个默认情况下。 对于 var a = "foo"; 这两种情况没有什么区别。 但 a = "foo" 就有明显区别了,默认情况下a将成为全局变量。而=1时a仍然是局部变量。
最近我也在看相关内容,补充一下。 nodejs的环境变量 NODE_MODULE_CONTEXTS。 默认情况下它为0,表示module不使用独立的context。 设置为1,表示为每个module创建独立的context。 一般我们没有设置,也就是默认情况,nodejs为module创建了闭包环境 lz说的情况主要是只这个默认情况下。 对于 var a = "foo"; 这两种情况没有什么区别。 但 a = "foo" 就有明显区别了,默认情况下a将成为全局变量。而=1时a仍然是局部变量。
翻源码找答案的人伤不起啊!支持
謝謝你的回答, 清楚許多^^ thanks
我英文不太好 阻塞应该是blocking 非阻塞应该是nonblocking. 其实是这样的,例如核心脚本,在lib下的node脚本,如module,fs,http等,其编译后的存储是使用的json对象,来避免文件的读写,即形式如{"module":"...","http":"..."},会伴随着node.exe一起加载,require核心模块是不涉及到IO读写的,但是非核心脚本,存在着IO读写,但关键是,无论是核心模块还是非核心模块的脚本都是使用了js中类似"eval"的 process.binding("evals").NodeScript.runInThisContext来解析,解析必然是阻塞的