发现一个有意思的变量暴露问题
刚才撸代码调用一个变量,这个变量被暴露出去在其他文件改变了它的值,但是本文件调用时发现并没有改变,看了半天发现了一个问题。
新建一个a.js
1 | const b = require('./b'); |
新建b.js
1 | var foo = 1; |
使用node a.js启动,a.js先输出 1 然后b.js一秒后输出 1 ,233,233。
所以为什么b.js的console.log(foo)输出是1呢。。暂时不清楚,看下一个列子:
新建a.js
1 | const b = require('./b'); |
新建b.js
1 |
|
这里的foo是一个对象,里面有键值对a:1,这时猜猜b.js输出是什么,bingo,当然是233了。。。
这里也许知道为什么上面的变量值没有改变了。。也许传值和传引用在暴露变量也生效了。暴露一个变量 可以不用var而直接exports一个变量。
1 | module.exports.a = 1; |
所以对于传值来说,在暴露之前声明变量就没有什么意义了。反正调用的时候都要带上前面的一坨。。。
评论