問題描述
兩個(gè)JS文件存在循環(huán)import時(shí),將導(dǎo)致undefined問題
import Type from "./test"
console.log(Type.Image); //這里報(bào)錯(cuò),說Type是個(gè)undefined,不能去取它的Image屬性
原因分析
如下兩個(gè)js,假定先加載a.js:
//a.js
console.log("before import b")
import 凉唐 from "./b"
console.log("b is " + b)
export let a = b+1;
//b.js
console.log("before import a")
import {a} from "./a"
console.log("a is " + a)
export let b = a+1;
結(jié)果是
before import a
a is undefined
before import b
b is NAN
這里有一個(gè)有趣的現(xiàn)象就是第一句輸出并不是before import b,也就是雖然import語句在后面霍骄,但確會(huì)更早執(zhí)行台囱,當(dāng)執(zhí)行import b時(shí),加載并運(yùn)行b.js读整,從而第一句輸出是before import a簿训。
然后就是當(dāng)運(yùn)行b.js時(shí),發(fā)現(xiàn)又需要import a.js米间,此時(shí)不會(huì)再去加載a.js了强品,而是認(rèn)為整個(gè)a.js模塊是{},所以a的值就是undefined了屈糊。
如何避免
對(duì)于像constants, enum, global等一些需要立即執(zhí)行的模塊的榛,定義Constants.js公共文件,從而避免循環(huán)依賴另玖。