JavaScript内嵌函数是传值还是传址

在一般编程语言中, 参数都是"传值", 假设一个C函数的原型是int Fun(int value); 当你调用这个函数时, Fun函数首先会在自己的函数栈上copy一份参数, 就是这个函数的副本, 当你在Fun外部修改value值, 并不会影响Fun内部的value. 而Javascript的内嵌函数很特殊, 如果传人是对象的话,它并不会copy一个参数副本, 所有函数公用一套参数, 所以你在函数外部修改了参数值, 函数内部也会受影响. 这就是为什么你的show函数, 它的z参数是最后一个值, 因为每一次循环, z都被更改了. 传值和传址的问题。
在 JavaScript 中,变量的传递方式是“按值传递”。这意味着当你把一个变量传递给一个函数时,实际上传递的是该变量的值,而不是它的地址。

例如:

javascript
复制
let x = 5;

function changeValue(y) {
y = 10;
}

changeValue(x);
console.log(x); // 输出:5

在上面的例子中,尽管我们尝试在 changeValue 函数中改变 y 的值,但这并不会影响到原始的 x 变量。这是因为我们实际上传递的是 x 的值,而不是 x 的地址。

然而,JavaScript 中的对象(例如数组或对象字面量)是按引用传递的。这意味着如果你传递的是一个对象,那么函数内部对对象的修改会影响到原始对象。

例如:

let obj = { value: 5 };

function changeObject(o) {
o.value = 10;
}

changeObject(obj);
console.log(obj.value); // 输出:10

在这个例子中,尽管我们传递的是 obj 的一个副本,但由于对象是按引用传递的,所以函数内部对 o 的修改会影响到原始的 obj 对象。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_ll9023one

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值