今天遇到的筆試題,請各位老鐵解惑a.js和b.js互相require,會不會陷入死循環?能不能導出結果?怎麼避免這問題?
這是檢視JavaScript模組的循環載入你可以用使用es6的模組機制繞過這個問題,ES6處理"循環載入"與CommonJS有本質的不同。 ES6根本不會在乎是否發生了"循環載入",只是產生一個指向被載入模組的引用,需要開發者自己保證,真正取值的時候能夠取到值。
如果從字面意思理解,只使用
var b = require('b')
那麼這個問題可以理解成CommonJS中的循環引用問題。 CommonJS的做法是,一旦出現某個模組被"循環載入",就只輸出已經執行的部分,還未執行的部分不會輸出。
如果從概念上理解兩個模組之間的循環引用,則也涉及es6的模組引用。
import b from 'b'
ES6根本不會關心是否發生了"循環加載",只是產生一個指向被加載模組的引用,需要開發者自己保證,真正取值的時候能夠取到值。
單純只使用CommonJs,或單純只使用esm(es6 module),都不會發生死循環。但如果兩者混用就可能發生。
推薦阮一峰的一篇博客,寫得挺完善的。 http://www.ruanyifeng.com/blo...
這是檢視JavaScript模組的循環載入
你可以用使用es6的模組機制繞過這個問題,ES6處理"循環載入"與CommonJS有本質的不同。 ES6根本不會在乎是否發生了"循環載入",只是產生一個指向被載入模組的引用,需要開發者自己保證,真正取值的時候能夠取到值。
如果從字面意思理解,只使用
那麼這個問題可以理解成CommonJS中的循環引用問題。 CommonJS的做法是,一旦出現某個模組被"循環載入",就只輸出已經執行的部分,還未執行的部分不會輸出。
如果從概念上理解兩個模組之間的循環引用,則也涉及es6的模組引用。
ES6根本不會關心是否發生了"循環加載",只是產生一個指向被加載模組的引用,需要開發者自己保證,真正取值的時候能夠取到值。
單純只使用CommonJs,或單純只使用esm(es6 module),都不會發生死循環。但如果兩者混用就可能發生。
推薦阮一峰的一篇博客,寫得挺完善的。
http://www.ruanyifeng.com/blo...