You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中array.splice()调用差异及=赋值适用场景咨询

一、形参(Parameters)和实参(Arguments)的区分

  • 形参(Parameters):函数定义时括号里声明的变量,是函数内部的局部“占位符”,用来接收调用时传入的内容。比如function foo(array, index)里的array和index就是形参。
  • 实参(Arguments):调用函数时实际传入的具体值或引用,是给形参“填充”的实际内容。比如执行foo([1,2,3], 1)时,[1,2,3]和1就是实参。

二、数组splice调用的两种写法差异

先明确Array.splice()的核心特性:

  • 它是原地修改原数组的方法,会直接改变调用它的数组本身;
  • 它的返回值是被删除元素组成的新数组(未删除元素则返回空数组)。

第一种写法有效的逻辑

function foo(array, index) { 
  array.splice(index, 1) 
  return array 
}

数组属于引用类型,函数形参array保存的是原数组的内存地址。调用array.splice()时,会顺着这个地址找到原数组并完成修改。最后返回的array依然指向原数组的引用,所以拿到的是修改后的目标数组,符合需求。

第二种写法“无效”的逻辑

function foo(array, index) { 
  array = array.splice(index, 1) 
  return array 
}

这里执行array = array.splice(...)时发生了两个关键动作:

  1. 调用splice已经原地修改了原数组;
  2. 把splice返回的被删除元素数组赋值给形参array,此时形参array的指向被改变——从原数组的内存地址,切换为splice返回的新数组地址。
    最后返回的是被删除的元素数组,而非修改后的原数组,所以看起来“无效”。

赋值符号=的适用场景

  • 基本类型赋值:比如let a = 1; b = a,是值的拷贝,两个变量后续修改互不影响;
  • 引用类型赋值:比如let arr1 = [1,2]; arr2 = arr1,是内存地址的拷贝,两个变量指向同一个数组,修改其中一个会影响另一个;
  • 改变变量指向:当需要让变量切换指向新的值或引用时使用,比如保存函数返回值、替换变量的引用目标;
  • 注意:如果要保留原数组同时得到修改后的新数组,不要用splice(它会修改原数组),可以用slice结合扩展运算符实现,比如const newArr = [...array.slice(0, index), ...array.slice(index+1)]。

内容的提问来源于stack exchange,提问作者Gennadiy Mostovskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:30:47