NodeJS中的`require`是否可以认为是在require的词法位置加载文件?
Can `require` in NodeJS be thought of as loading the file in the lexical position of the require?
NodeJS中的require
是否可以被认为是在require
的词法位置加载和运行文件,但受模块边界(模块范围)的限制?
1: console.log('foo');
2: var bar = require('bar'); // Loaded and evaluated in after line 1 is evaluated?
3: console.log('bam'); // Run after the contents of bar has been loaded and evaluated?
是,对于给定节点进程中对 require("bar")
的第一次调用。随后调用 require("bar")
return 缓存副本。
如果您的代码构成了一个完整的程序,您可以保证第 1 行在 bar
被评估之前执行。
如果它构成程序的一部分,您不能保证这一点,因为 bar
可能已在之前对 require("bar")
.
的调用中求值
在任何一种情况下,您都可以保证在评估 bar
之后执行第 3 行。
延伸阅读:
NodeJS中的require
是否可以被认为是在require
的词法位置加载和运行文件,但受模块边界(模块范围)的限制?
1: console.log('foo');
2: var bar = require('bar'); // Loaded and evaluated in after line 1 is evaluated?
3: console.log('bam'); // Run after the contents of bar has been loaded and evaluated?
是,对于给定节点进程中对 require("bar")
的第一次调用。随后调用 require("bar")
return 缓存副本。
如果您的代码构成了一个完整的程序,您可以保证第 1 行在 bar
被评估之前执行。
如果它构成程序的一部分,您不能保证这一点,因为 bar
可能已在之前对 require("bar")
.
在任何一种情况下,您都可以保证在评估 bar
之后执行第 3 行。
延伸阅读: