应该是一个javascript的基础问题,但是感觉很绕啊。

javaissohard 2017-12-22 10:10:35
如下两段代码,绕晕了

代码1:
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event;
event = {a:1,b:2} ; //既然arr.test存储的是event变量,为什么不会跟着event变化呢?
console.log(arr.test);

输出=> {a:1}

------------------------------

代码2:
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event;
event.b = 2; //为什么增加属性的方式就可以改变arr.test的值?
console.log(arr.test);

输出=> {a:1,b:2}
...全文
215 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
漠子凉 2017-12-22
  • 打赏
  • 举报
回复
它不是存储你那个变量,只是存储了那个变量的值 比如一个简单的dom例子 var test = document.getElementById('test').innerHTML 然后你换掉test test = 123 如果按照你说的是变量保存的话。那dom就会跟随的双向绑定一起变化了 所以他们只是赋值而已
五更琉璃 2017-12-22
  • 打赏
  • 举报
回复
楼主学习一下 JS 中的值类型和引用类型的章节 就明白了
functionsub 2017-12-22
  • 打赏
  • 举报
回复
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event; 
event = {a:1,b:2} ;  //既然arr.test存储的是event变量,为什么不会跟着event变化呢?
console.log(arr.test);
因为arr.test实际指向的event指向的那个object,event只是一个中介 重新定义event的时候,并没有影响arr.test实际指向的那个object
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event;
event.b = 2; //为什么增加属性的方式就可以改变arr.test的值?
console.log(arr.test);
同上,这时候修改了一开始指向的那个object,就影响了arr.test
文修 2017-12-22
  • 打赏
  • 举报
回复
3楼讲的比较清楚
  • 打赏
  • 举报
回复
代码1: event = {a:1, b:2} ; // 这句话导致了event的引用变了,本来指向对象{a:1},现在指向对象{a:1, b:2} 代码2: event.b = 2; // 这句话是不会改变event的引用的,本来指向对象{a:1},现在依然指向对象{a:1},并给对象{a:1}添加了个属性b

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧