JavaScript参数按值传递

本文深入解析JavaScript中的参数传递机制,包括按值传递和按引用传递的区别,以及如何影响函数内外的变量。通过实例演示基本数据类型与引用类型的传递差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript参数按值传递

  1. ECMAScript中所有函数的参数都是按值传递
 
什么是按值传递呢?
  1. 也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
var value = 1

function foo(value){
    value = 2
    console.log(value) // 2
}
foo(value)
console.log(value) // 1

当传递value到函数foo中,相当于拷贝了一份value,假设拷贝的这份叫_value,函数中修改的都是_value的值,而不会影响原来的value的值

引用传递?

  1. 如果值是一个复杂的数据结构,拷贝(值传递)就是产生性能影响
  2. 引用传递,就是传递对象的引用,函数内部对参数的任何改变都会影响原有对象的值,因为两者引用的是统一地址。
var obj = {
    value : 1
}

function foo(obj){
    obj.value=2
    console.log(obj.value)// 2
}
foo(obj)
console.log(obj.value)// 2

上面说了ECMAScript中所有函数的参数都是按值传递,怎么能按引用传递成功呢

共享传递
var obj = {
    value : 1
}
function foo(obj){
    obj = 2 
    console.log(obj)// 2
}
foo(obj)
console.log(obj.value)// 1

如果JavaScript采用的是引用传递,外层的值也会被修改。

所以修改 o.value,可以通过引用找到原值,但是直接修改 o,并不会修改原值。所以第二个和第三个例子其实都是按共享传递。
 
注意: 按引用传递是传递对象的引用,而按共享传递是传递对象的引用的副本!
 
最后,可以这样理解:
参数如果是基本数据类型可以按值传递,如果是引用类型,按照共享传递。

转载于:https://my.oschina.net/u/4052053/blog/3020375

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值