为了账号安全,请及时绑定邮箱和手机立即绑定

将对象赋值给变量,修改变量为什么对象没有被改变?

将对象赋值给变量,修改变量为什么对象没有被改变?

森栏 2018-07-05 10:22:36
let crop = {       list: {},       on(key, fn) {        if(!this.list[key]) {           this.list[key] = [];         }         this.list[key].push(fn);       },       emit(key, ...payload) {        let fns = this.list[key];        if(!fns || fns.length === 0) return;         fns.forEach(fn => {          fn.apply(this, payload);         })       },       remove(key, fn) {        let fns = this.list[key];         console.log(key);         fns = [];               }     }写发布订阅的时候遇到了个问题。我在调用crop.remove()的时候清空了fns 但是打印fns还是有数据的。fns.length = 0;这样是可以清除的。fns不是也指向了this.list[key]吗?下方有打印结果
查看完整描述

4 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

有种
var a=[1];
var b=a;
b=[]
a??的感觉
同理 fns = [] 并不会使 this.list[key] 为[]

查看完整回答
反对 回复 2018-07-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

fns = []只是把fns指向了新的[]

查看完整回答
反对 回复 2018-07-18
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

fns.length = 0 ; 之所以可以清空 是因为 你的fns = this.list[key];
fns = []; 这样不会清空this.list[key] 你可以理解成 fns = 1 一个道理 ;你是在给fns这个变量重新赋值 跟this.list[key];没关系。

查看完整回答
反对 回复 2018-07-18
  • 4 回答
  • 0 关注
  • 335 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信