为何使用展开运算符或apply调用函数仅打印首个数组元素?
问题原因
你的函数myfunc只定义了一个参数str,当你用...strings展开数组调用时,虽然把数组里的四个元素都当成独立参数传了进去,但函数只会读取第一个参数,剩下的三个参数没有被函数处理,所以只会打印第一个元素。
解决方法
可以用以下几种方式修复:
方式一:让函数接收所有传入的参数
修改函数参数为剩余参数,这样能接收所有传递过来的参数,再遍历打印:
function myfunc(...strs){ strs.forEach(str => console.log(str)) } strings = ["hamza", "Hamza", "name", "Name"] myfunc(...strings)
方式二:直接传入数组,在函数内部遍历
不用展开数组,把整个数组作为参数传给函数,然后在函数里遍历打印每个元素:
function myfunc(strs){ strs.forEach(str => console.log(str)) } strings = ["hamza", "Hamza", "name", "Name"] myfunc(strings)
方式三:遍历数组逐个调用函数
保持原函数只处理单个元素的逻辑,自己遍历数组,每次调用函数传入一个元素:
function myfunc(str){ console.log(str) } strings = ["hamza", "Hamza", "name", "Name"] // 用forEach遍历 strings.forEach(str => myfunc(str)) // 或者用for...of循环 for(const str of strings) { myfunc(str) }
内容的提问来源于stack exchange,提问作者hamza
相关产品推荐
相关产品推荐

