Heim > Fragen und Antworten > Hauptteil
Was die schriftlichen Testfragen betrifft, auf die ich heute gestoßen bin, geben Sie mir bitte einige Antworten.
A.js und b.js erfordern einander. Werden sie in eine Endlosschleife geraten? Können die Ergebnisse exportiert werden? Wie vermeide ich dieses Problem?
迷茫2017-06-28 09:30:31
这是考察JavaScript模块的循环加载
你可以用使用es6的模块机制绕开这个问题,ES6处理"循环加载"与CommonJS有本质的不同。ES6根本不会关心是否发生了"循环加载",只是生成一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。
PHP中文网2017-06-28 09:30:31
如果从字面意思理解,只使用
var b = require('b')
那么这个问题可以理解成CommonJS中的循环引用问题。CommonJS的做法是,一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出。
如果从概念上理解两个模块之间的循环引用,则还涉及到es6的模块引用。
import b from 'b'
ES6根本不会关心是否发生了"循环加载",只是生成一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。
单纯只使用CommonJs,或者单纯只使用esm(es6 module),都不会发生死循环。但如果两者混用就可能会发生。
推荐阮一峰的一篇博客,写得挺完善的。
http://www.ruanyifeng.com/blo...