JavaScript函数调用后,需赋值返回值给外部变量吗?A/B哪种正确?
问题:哪种方式能正确获取modifyAllValues函数返回的更新后的值?
我们先定义三个变量:
a:布尔值falseb:整数10c:数组[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
相关产品推荐
相关产品推荐

