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

JavaScript中return语句工作原理及数组操作代码运行差异疑问

JavaScript return语句与splice方法行为差异解答

核心原因:Array.splice()的返回值特性

splice是JavaScript数组的内置修改方法,执行后返回的是被删除元素组成的新数组,而非修改后的原数组本身。

错误代码问题拆解

你提供的第一段代码直接返回了splice的执行结果:

function removeSmallest(numbers) {    
var min = Math.min(...numbers);  
return numbers.splice(numbers.indexOf(min), 1);
}

举个例子:如果传入数组为[2, 1, 3, 4],splice删除最小元素1之后,返回值是[1],所以调用函数拿到的结果是被删掉的最小元素数组,自然不符合「移除最小元素后返回剩余数组」的需求。

正确代码逻辑说明

第二段代码先执行splice修改原数组,再返回修改后的原数组:

function removeSmallest(numbers) {
  var min = Math.min(...numbers);
  numbers.splice(numbers.indexOf(min), 1); 
  return numbers;
}

splice本身会直接修改调用它的原数组,执行完删除操作后,原数组已经变成了移除最小元素的状态,此时再return原数组,返回的就是预期结果。

return语句的运行逻辑补充

JavaScript中return的行为非常直接:函数执行到return时,会立刻终止函数执行,将return后紧跟的表达式的计算值,作为函数的返回值返回给调用方,不会做任何隐式转换,你写的返回值是什么,调用方就拿到什么。

额外注意:splice会直接修改传入的原始数组,如果不想污染外部传入的原数组,可以先做浅拷贝再操作:

function removeSmallest(numbers) {
  const numbersCopy = [...numbers]
  const min = Math.min(...numbersCopy);
  numbersCopy.splice(numbersCopy.indexOf(min), 1);
  return numbersCopy;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:03