javascript - 兩個js文件相互require
問題描述
今天遇到的筆試題,請各位老鐵解惑a.js和b.js相互require,會不會陷入死循環(huán)?能不能導出結果?怎么避免這一問題?
問題解答
回答1:這是考察JavaScript模塊的循環(huán)加載你可以用使用es6的模塊機制繞開這個問題,ES6處理'循環(huán)加載'與CommonJS有本質的不同。ES6根本不會關心是否發(fā)生了'循環(huán)加載',只是生成一個指向被加載模塊的引用,需要開發(fā)者自己保證,真正取值的時候能夠取到值。
回答2:如果從字面意思理解,只使用
var b = require(’b’)
那么這個問題可以理解成CommonJS中的循環(huán)引用問題。CommonJS的做法是,一旦出現(xiàn)某個模塊被'循環(huán)加載',就只輸出已經(jīng)執(zhí)行的部分,還未執(zhí)行的部分不會輸出。
如果從概念上理解兩個模塊之間的循環(huán)引用,則還涉及到es6的模塊引用。
import b from ’b’
ES6根本不會關心是否發(fā)生了'循環(huán)加載',只是生成一個指向被加載模塊的引用,需要開發(fā)者自己保證,真正取值的時候能夠取到值。
單純只使用CommonJs,或者單純只使用esm(es6 module),都不會發(fā)生死循環(huán)。但如果兩者混用就可能會發(fā)生。
推薦阮一峰的一篇博客,寫得挺完善的。http://www.ruanyifeng.com/blo...
相關文章:
1. javascript - 循環(huán)嵌套多個promise應該如何實現(xiàn)?2. mysql優(yōu)化 - 關于mysql分區(qū)3. css3 - rem布局下,用戶瀏覽器的最小字號是12px怎么辦?4. javascript - ionic2 input autofocus 電腦成功,iOS手機鍵盤不彈出5. html5 - 如何實現(xiàn)帶陰影的不規(guī)則容器?6. objective-c - iOS開發(fā)支付寶和微信支付完成為什么跳轉到了之前開發(fā)的一個app?7. 前端 - IE9 css兼容問題8. 請教各位大佬,瀏覽器點 提交實例為什么沒有反應9. vue.js - vue 打包后 nginx 服務端API請求跨域問題無法解決。10. css - 移動端字體設置問題
