我试过这个:
// mod.js
var a = 1;
this.b = 2;
exports.c = 3;
// test.js
var mod = require('./mod.js');
console.log(mod.a); // undefined
console.log(mod.b); // 2
console.log(mod.c); // 3, so this === exports?
Run Code Online (Sandbox Code Playgroud)
所以我想象require()可能是这样实现的:
var require = function (file) {
var exports = {};
var run = function (file) {
// include "file" here and run
};
run.apply(exports, [file]);
return exports;
}
Run Code Online (Sandbox Code Playgroud)
是对的吗?请帮我理解require(),或者在哪里可以找到源代码.谢谢!
当我回答另一个问题时,我遇到了一个带有顶级return语句的Node.js模块.例如:
console.log("Trying to reach");
return;
console.log("dead code");
Run Code Online (Sandbox Code Playgroud)
这没有任何错误和打印工作:
Trying to reach
Run Code Online (Sandbox Code Playgroud)
在标准输出但不是" dead code" - return实际停止执行.
但根据ECMAScript 5.1中的return语句规范,
语义
如果ECMAScript程序包含不在a内的return语句,
FunctionBody则认为它在语法上是不正确的.
在上面显示的程序中return不包含任何功能.
那为什么不扔?
javascript ×2
node.js ×2
apply ×1
node-modules ×1
require ×1
return ×1
syntax-error ×1
this ×1