JS数组输出结果异常,如何修改程序得到预期输出?
问题分析与解决方案
你遇到的问题根源是循环调用数组中的每个函数时,都传递了全部四个参数,但第二个函数只定义了job和city两个形参,它会自动取传入参数的前两个——也就是"Sam"和27,这就导致输出不符合预期。
下面是几种可行的修改方案:
方法一:给每个函数传递对应参数
直接针对每个函数的需求传递匹配的参数,不用强制用循环统一传参:
const arr = [ (name, age) => { console.log(`My name is ${name} and I am ${age} years old.`); }, (job, city) => { console.log(`I work as a ${job} in ${city}.`); } ]; // 给第一个函数传姓名和年龄,第二个传职业和城市 arr[0]("Sam", 27); arr[1]("Web Dev", "Ind");
如果一定要用循环,可以把函数和对应参数配对存储:
const funcWithParams = [ { func: (name, age) => console.log(`My name is ${name} and I am ${age} years old.`), params: ["Sam", 27] }, { func: (job, city) => console.log(`I work as a ${job} in ${city}.`), params: ["Web Dev", "Ind"] } ]; for (let item of funcWithParams) { item.func(...item.params); }
方法二:用对象传递参数(避免顺序问题)
把所有参数打包成对象,让每个函数只提取自己需要的属性,这种方式不受参数顺序影响:
const arr = [ ({ name, age }) => { console.log(`My name is ${name} and I am ${age} years old.`); }, ({ job, city }) => { console.log(`I work as a ${job} in ${city}.`); } ]; const userInfo = { name: "Sam", age: 27, job: "Web Dev", city: "Ind" }; for (let i = 0; i < arr.length; i++) { arr[i](userInfo); }
内容的提问来源于stack exchange,提问作者Sougata Mukherjee
相关产品推荐
相关产品推荐

