JS的连等赋值
2024-09-05 23:37:36
参考自,我再整理一遍。
- 题目如下:
var a = {n:1};
var b = a;
a.x = a = {n:2};
alert(a.x);
alert(b.x);输出为 undefined, {n:2} .
连等赋值时,对于 a.x = a = {n:2};
- 解析器先解析 a.x , 再解析a,得到他们的指针
- 解析a.x的指针,因为此时a的指针指向的是 {n:1} , ‘x’属性并没有声明,先创建一个该属性,所以 {n:1}变为 {n:1, x:null}
- 再做赋值操作。
- 根据赋值的右结合性,上面的代码可以写为 a.x的引用 = (a的引用 = {n:2})
- 即先将值 {n:2} ,赋值给 a的引用 ,再赋值给 a.x的引用 ,但此时a已经指向 {n:2} , a.x 就是 ({n:2}).x ,但是 {n:2}并没有该属性
- 再将 {n:2} 赋值给 a.x的引用 ,即也是 b.x的引用 ,所以 {n:1, x:null}变为 {n:1, x: {n: 2}}
- 解析器先解析 a.x , 再解析a,得到他们的指针
最新文章
- Lua的string和string库总结
- SQL Server 常用关键字
- 【WIN10】绑定x:Bind
- 为了方便可灌入自定义方法AppendLog 比如File
- webuploader 上传文件参数设置
- LINUX 虚拟机克隆与网络配置
- ASP.NET的Cookie和Session
- 【Win10】页面导航的实现
- ViewPager的使用
- rsync实现免密码操作的一种实现方式
- Invoke-Express 执行多个批处理命令的函数
- Specify a culture in string conversion explicitly
- NFinal ajax
- [python]pip总结
- eclipse的工程中如何查找字符串
- appium 后台运行shell脚本
- HI3516EV100 RTMP添加音频
- LINE@生活圈招募好友秘笈
- websocket使用
- [转帖] JVM虚拟机的历史