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

JavaScript函数调用后,需赋值返回值给外部变量吗?A/B哪种正确?

问题:哪种方式能正确获取modifyAllValues函数返回的更新后的值?

我们先定义三个变量:

  • a:布尔值false
  • b:整数10
  • c:数组[1, 2, 3, 4, 5]

用于修改这三个变量的modifyAllValues函数代码如下:

function modifyAllValues(a, b, c){
    a = true;
    b = b + 10;
    c.pop();

    return [a, b, c];
}

程序主部分的变量声明代码:

$(document).ready(function(){
    let a = false;
    let b = 10;
    let c = [1, 2, 3, 4, 5];
});

现在需要调用modifyAllValues函数获取更新后的值,以下两种方式哪种正确?

方式A

$(document).ready(function(){
    /*-----方法1-----*/

    let tempArray = modifyAllValues(a, b, c);
    /* 将返回值重新赋值给已声明的变量 */
    a = tempArray[0];
    b = tempArray[1];
    c = tempArray[2];

    //console.log(a) => true
    //console.log(b) => 20
    //console.log(c) => [1, 2, 3, 4]
});

方式B

$(document).ready(function(){
    /*-----方法2-----*/

    let tempArray = modifyAllValues(a, b, c);
    /* 不将返回值赋值给变量直接使用 */
    //console.log(a) => true
    //console.log(b) => 20
    //console.log(c) => [1, 2, 3, 4]
});

正确答案:方式A

为啥是A不是B?得搞懂JS的参数传递逻辑:

  • 像布尔、数字这种基本类型,函数接收的是它们的副本——函数里改的只是这个副本,外部的原变量根本不会变。所以如果不把函数返回的新值重新赋值给a和b,外部的a还是false,b还是10,跟方式B里的注释完全不符。
  • 数组c是引用类型,函数里的c.pop()确实会改掉原数组(原数组会变成[1,2,3,4]),但这只是巧合——方式B里的a和b还是老值,只有方式A把函数返回的三个值重新赋值给原变量,才能让a、b、c都拿到更新后的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:57:22