Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

ES6 Modules 神奇的引用传值

  在我的认知中,JavaScript 的变量赋值通常不会有副作用(非严格模式的 arguments 映射机制除外)。然而 ES6 的 Modules 毁了我的三观。虽然它不算是变量赋值吧,但它确实是引用传递的。请原谅我我书读得少没能理解这么设计的用意,只是单纯地表示好奇而已。
  如果是原生的 node,下面这个代码应该输出什么结果呢?(请不要吐槽自引用的奇葩测试用例) // test.js
module.exports = 1;
var a = require('./test');

console.log(a); // 1
module.exports = 2;
console.log(a); // 2 上面的修改不会生效
  除了上面的测试自引用外,代码的执行流程都是挺正常可以理解的。但如果是 ES6 的 Modules 呢? // test.js
export default 1;
import a from './test';

console.log(a); // 1
export default 2;
console.log(a); // 2
  export 会改变 a 的值。。。然而 a 是一个数值啊!节操何在?
  虽然有点奇怪,不过主要是因为我的用法奇怪,因为自引用比较奇怪吧。正常 export 必须在顶层作用域的话就不自引用就不会出现这么神奇的情况。也许是因为我自己作死吧?
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^