js函数传参数 按值传递

在js中,函数传递参数都是按值传递的,当在传递参数时,形参是一个局部变量,和实参互不影响,当参数是一个引用数据类型时,形参复制的是 实参的一份引用,所以当其改变时会影响外部实参,但并不意味着,是按引用传递的

基本类型

var num= 10
test(num)
function test(params){
          params= 20   ----->改变
}
console.log(num)  ------>外部变量num未发生变化


调用函数时,params局部变量得到  num复制的值,两个互不影响

引用类型

var testObj = new Object(null)
test(testObj)
function test(obj){
            obj.name = '张三'
            console.log('函数内部',obj.name) // 张三'
 }
  console.log(testObj.name) // 张三

调用函数时,形参 obj 获得 变量 testObj  的引用,因此在 形参 添加了 name属性,会影响到  外部变量 testObj ,但不意味着 是按引用传递

引用类型 测试2

var testObj = new Object(null)
test(testObj)
function test(obj){
            obj.name = '张三'
            obj = {
            name:'复制一个新对象引用'
            }
            console.log('函数内部',obj.name) // 复制一个新对象引用'
 }
  console.log(testObj.name) // 张三
  
可以看到,当 对形参重新赋值一个引用时,并不会影响到 外部 变量
可以这样理解:
形参 obj 是复制的 实参 testObj 的引用。
且 obj是函数内的局部变量,当在其引用上操作时,会影响到外部实参
因为他们是同一份引用
但 当在函数内部重写 obj时,可以看到 在函数内部,obj的name属性是改变了的
但,外部确没有发现,因为 重写时 这个变量的引用就变成了一个局部对象
函数调用完就销毁了

综上:
函数传参是按值的,需要注意的是 在引用数据类型时,形参 得到的 实参引用,所以,在改变 形参的属性时,会影响到 实参,但是,当重写 改写 形参时(重新赋值引用),此时 这个形参就变成了 局部对象,不会影响到外部,函数执行完后被销毁

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值