鍍金池/ 問答/HTML/ 將對(duì)象賦值給變量,修改變量為什么對(duì)象沒有被改變?

將對(duì)象賦值給變量,修改變量為什么對(duì)象沒有被改變?

寫發(fā)布訂閱的時(shí)候遇到了個(gè)問題。
我在調(diào)用crop.remove()的時(shí)候清空了fns 但是打印fns還是有數(shù)據(jù)的。fns.length = 0;這樣是可以清除的。fns不是也指向了this.list[key]嗎?
下方有打印結(jié)果

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 = [];
       
      }
    }

圖片描述

回答
編輯回答
蔚藍(lán)色

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

2018年3月11日 11:19
編輯回答
真難過

fns.length = 0 ; 之所以可以清空 是因?yàn)?你的fns = this.list[key];
fns = []; 這樣不會(huì)清空this.list[key] 你可以理解成 fns = 1 一個(gè)道理 ;你是在給fns這個(gè)變量重新賦值 跟this.list[key];沒關(guān)系。

2017年4月19日 06:39
編輯回答
笑忘初

有種
var a=[1];
var b=a;
b=[]
a??的感覺
同理 fns = [] 并不會(huì)使 this.list[key] 為[]

2018年1月12日 20:53
編輯回答
醉淸風(fēng)
let fns = this.list[key];
console.log(key);
fns = [];

fns指向this.list[key],但是fns = []等同于將fns指向了一個(gè)新的數(shù)組。
類似于,

let fns = objA; // fns指向objA
fns = objB; // fns指向objB,之后對(duì)fns的操作就相當(dāng)于對(duì)objB的操作,與objA無關(guān)。
2018年4月8日 04:21