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

JavaScript函数控制台输出正常但无法将结果赋值给变量

为什么函数调用结果赋值给变量后是undefined?

你的applySalaryIncrease函数没有设置返回值,JavaScript里未显式声明return的函数,调用后默认返回undefined,这就是updatedEmployees变量值为undefined的原因。

为什么直接调用函数后原数组会变化?

因为数组里的元素是对象,属于引用类型。你在函数里直接修改数组中对象的salary属性,本质是操作原数组对应对象的内存地址数据,所以原数组会被直接修改,这也是你调用函数后打印employees能看到薪资变化的原因。

两种解决方法

方法1:让函数返回原数组(仍会修改原数组)

给函数添加return语句,返回修改后的原数组:

function applySalaryIncrease(employees) {
    for (let i=0; i < employees.length; i++) {
        if (i == 1){
            continue;
        }
        employees[i].salary = employees[i].salary * 1.2;
    }
    return employees; // 添加返回语句
 }

此时调用updatedEmployees = applySalaryIncrease(employees),updatedEmployees会拿到修改后的数组,但它和原employees指向同一个数组,修改其中一个会影响另一个。

方法2:创建数组副本并修改(不影响原数组,推荐)

如果不想修改原数组,可以创建原数组的副本,修改副本后返回,比如用map方法:

function applySalaryIncrease(employees) {
    return employees.map((emp, index) => {
        // 跳过Mary(索引为1的元素),直接返回原对象
        if (index === 1) {
            return emp;
        }
        // 其他员工返回新对象,薪资增加20%
        return { ...emp, salary: emp.salary * 1.2 };
    });
}

这种方式下,updatedEmployees是全新的数组,原employees不会被修改,避免了意外的副作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:36