今天代码遇到方法未定义has no method问题。发现是循环引用的问题。
nodejs在遇到循环require时,会把require结果得到的结果变成空对象{}。这个结果包括的是循环引用链中的每一个。
例子:
a.js console.log(‘a.js’); var b = require(’./b’); console.log(‘a+.js’); console.log(b); exports={name:‘a’}; console.log(‘a++.js’);
b.js
console.log(‘b.js’); var c = require(’./c’); console.log(‘b+.js’); console.log©; exports={name:‘b’}; console.log(‘b++.js’);
c.js
console.log(‘c.js’); var a = require(’./a’); console.log(‘c+.js’); console.log(a); exports={name:‘c’}; console.log(‘c++.js’);
然后我执行
node a.js
打印如下:
a.js b.js c.js c+.js {} c++.js b+.js {} b++.js a+.js {} a++.js
可以看到node会按引用链引用,直到发现循环引用了为止。
然后开始回溯,所有的代码都会执行到。
唯一不同的是所有循环链中require的结果都是空对象{}.
在代码编写过程中怎样可以避免这个问题的出现呢?