不在函数内传递对象中的值

Not passing the value in the object within function

函数removeItem中的listCount--不传递list.itemCount中的值,而是itemLists.splice(indexOfLi, 1); 在同一个函数中完美地删除了 list.itemList 中的值。我很困惑,这是什么问题?谢谢


const list = {
    itemCount: 0,
    itemList: []
  };

function displayValue(countText, itemLists, listCount, ulVar) {
  countText.append(` (${listCount})`);

  for (let i = 0; i < listCount; i++) {
    createElement(itemLists[i]?.item, itemLists[i]?.time, ulVar);
  }

  removeItem(itemLists, listCount, countText);
}


function removeItem(itemLists, listCount, countText) {
  const fontASTrash = $('.fa-trash');

  fontASTrash.off().on('click', function () {
    const indexOfLi = $(this).parent().parent().index();

    $(this).parent().parent().remove();
    itemLists.splice(indexOfLi, 1);
    listCount--;
    countText.text(`Item List (${listCount})`);

  });
}


displayValue(itemListText, list.itemList, list.itemCount, ulItemList);

listCount 函数中的 removeItem 变量不包含对 list.itemCount 值的引用,实际上是一个独立变量。

之所以会出现这种情况,是因为在调用下面的时候:

displayValue(itemListText, list.itemList, list.itemCount, ulItemList);

.itemCount 值作为独立原始值传入,不再是 list 对象的一部分,因此您可以在 displayValueremoveItem 中更改它功能,但它将不再增加 list 对象内的值。

当解构对象时也可以说明这种行为,因为执行以下操作将不再编辑 list 中的值:

const { itemCount } = list;
itemCount--; // this will no longer change list.itemCount

修复方法是简单地将对象传递给 displayValueremoveItem 函数。例如:

displayValue(itemListText, list, ulItemList);

并将它们与对象引用一起使用。例如list.itemCount--.