首頁  >  問答  >  主體

javascript - 兩個js檔案相互require

今天遇到的筆試題,請各位老鐵解惑
a.js和b.js互相require,會不會陷入死循環?能不能導出結果?怎麼避免這問題?

学习ing学习ing2642 天前788

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-06-28 09:30:31

    這是檢視JavaScript模組的循環載入
    你可以用使用es6的模組機制繞過這個問題,ES6處理"循環載入"與CommonJS有本質的不同。 ES6根本不會在乎是否發生了"循環載入",只是產生一個指向被載入模組的引用,需要開發者自己保證,真正取值的時候能夠取到值。

    回覆
    0
  • PHP中文网

    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...

    回覆
    0
  • 取消回覆