javascript - 在这种情况下,Javascript 通过引用而不是值传递?
问题描述
我一直认为 javascript 是一种按值传递语言(其中所有函数参数的副本都在函数中使用,而不是通过引用编辑外部变量)所以我很震惊地发现运行下面的代码会改变外部变量'一个人的价值。
var one = [1];
var two = [2];
function broken(arr1, arr2) {
arr1[0] = arr2[0];
return arr1;
}
document.write("One: " + one + "<br>");
document.write("Two: " + two + "<br>");
document.write("Run 'broken': " + broken(one, two) + "<br>");
document.write("One: " + one + "<br>");
document.write("Two: " + two + "<br>");
产生这个输出:
> One: 1
> Two: 2
> Run 'broken': 2
> One: 2 //<------- this line
> Two: 2
如您所见,“one”数组的值已通过引用更改。我在这里有什么误解?谢谢。
解决方案
破坏函数的行为是正确的。
就像对象属性一样,如果您修改数组的值(而不是数组本身),它将修改原始值。
假设我们有一个数组
letters = ['A','C']
function willNotModify(array) {
array = ['A','Z']
}
function willModify(array) {
array[1] = 'B'
}
willNotModify(letters) // letters array is unchanged
willModify(letters) // letters array is now ["A", "B"]
希望这能澄清你的理解。
推荐阅读
- node.js - 如何在猫鼬模式中保存格式为 DD/MM/YYYY 的日期值,因为这样做时出现错误“Cast to Date failed for value "31/07/2019"”
- java - 设置 gRPC ServerInterceptors 的执行顺序
- javascript - 如果单击,折线地图制造商上的标题不显示
- c# - Dapper Guid 数组 IN 子句 MySql
- python - 如何从 python ML 项目制作 exe 文件?
- javascript - javascript中不同视频的两个按钮冲突
- node.js - Gcloud 应用部署错误:“QUOTA_FOR_INSTANCES”
- php - 如何将图像直接插入数据库(php)?
- python - 在 Colab 上训练的 simpletransformers 模型在本地无法工作
- wikipedia - 我如何评价维基百科文本的作者?