Node.js 中模块上下文中的范围
Scopes in context of Modules in Node.js
我需要了解 Node.js 中作用域的概念。事实上,当我尝试下面的代码时,this === global
//basic1.js file
this.bar = "Bacon";
//basic2.js file
require('./basic1');
console.log(this.bar);
并运行 basic2.js,输出是未定义的而不是培根。由于我在全局对象中分配一个属性栏,并且全局对象由所有节点模块共享,为什么我未定义为输出?你能帮我理解一下吗?
要理解节点.js更好地解释模块以查看源代码:
- 从文件中读取源代码。
- 像
function(exports, require, module, __dirname, __filename){ /* source code */ }
一样将源代码包装到函数调用中 - 将包装的代码评估到 v8 虚拟机中(类似于浏览器中的 eval 函数)并获取函数。
- 调用上一步中的函数,使用
exports
覆盖this
上下文。
简化代码:
var code = fs.readFileSync('./module.js', 'utf-8');
var wrappedCode = `function (exports, require, module, __dirname, __filename) {'n${code}'n}`;
var exports = {};
var fn = vm.runInThisContext(wrappedCode);
var otherArgs = [];
// ... put require, module, __dirname, __filename in otherArgs
fn.call(exports, exports, ...otherArgs);
相关文章:
- 将函数的上下文应用于javascript变量
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用JQuery的动态上下文菜单
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- 如何访问UIWebView'的子窗口上下文
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- 构造函数函数中的自执行函数的OO上下文/范围
- 如何更改对 javascript 属性的调用的范围/上下文
- JavaScript 范围和执行上下文
- ES6 循环和 forEach 中的上下文和变量范围
- 更改 Ember.ComputedProperty 的上下文/范围
- 新手:Javascript构造函数和范围上下文问题
- Javascript/jQuery 范围和上下文问题,当试图操作对象的“引用”时
- 术语执行上下文和范围之间是否有区别?
- 如何访问对象上下文和范围
- Durandal小部件的内部功能范围和上下文
- 功能范围和上下文的差异