持续往下看:
- a.x = a = {n: 2}; // (内存1 而不是 a ).x = 引用 a = 内存2 {n:2}
a 固然是引用,然则 JavaScript 是值传的┞封个引用,所以被修改不影响本来的处所。
- | Addr | 内容 |
- |-----------|-----------------------|
- | 1) a | 内存2({n:2}) |
- | 2) 内存1.x | 内存2({n:2}) |
- | 3) b | 内存1({n:1, x:内存2}) |
所以最后的结不雅
- a.x 即(内存2).x ==> {n: 2}.x ==> undefined
- b.x 即(内存1).x ==> 内存2 ==> {n: 2}
总结
JavaScrip t中没有引用传递,只有值传递。对象(引用类型)的传递只是拷贝一个新的引用,这个新的引用可以拜访本来对象上的属性,然则这个新的引用本身是放在别的一个格子上的值,直接往这个格子赋新的值,并不会影响本来的对象。本文开首所评论辩论的 Node.js 热更新时碰着的也是这个问题,差别是对象本身改变了,而本来拷贝出来的引用还指向旧的内存,所以经由过程旧的引用调用不到新的办法。
Node.js 并没有对 JavaScript 施加黑魔法,个中的引用问题依旧是 JavaScript 的内容。如 module.exports 与 exports 如许隐蔽了一些细节轻易使人误会,本质照样 JavaScript 的问题。别的推荐一个关于 Node.js 的进阶教程 《Node.js 面试》。
web.js
注[1]:
- 诚实说,模块在函数内声明有点谭浩强的感到。
- 把 b = include(xxx) 写在调用内部,还可以经由过程设置成中心件绑定在公共处所来写。
- 除了写在调用内部,也可以导出一个工厂函数,每次应用时 b().num 一下调用也可以。
- 还可以经由过程中心件的情势绑定在框架的公用对象上(如:ctx.b = include(xxx))。
- 要实现如许的热更新必须在架构上就要严格避免旧代码被引用的可能性,不然很轻易写出内存泄漏的代码。
【编辑推荐】
- JavaScript深刻之大年夜原型到原型链
- 实用于仪表盘项目标7个优良JavaScript库
- JavaScript即将来:介绍14个JavaScript的框架和库
- 在Node.js中看JavaScript的引用
- 大年夜JavaScript到TypeScript - 模块化和构建
推荐阅读
移动互联网人口红利逐渐消退 华为Hi-Star晨星计划一触即发
【51CTO.com原创稿件】 据懂得,在2016岁尾,我国移动智能终端范围冲破13.7亿台,跟着人口红利减退,充分盘活、经营现有流量便成为了各行各业全新的机会与挑衅。经由过程近几年互联网手机>>>详细阅读
地址:http://www.17bianji.com/lsqh/34702.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示