基本数据类型与引用数据类型的按值传递

ECMAScript中所有函数的参数都是按值传递的

变量有按引用和按值访问,但是参数只能按值传递
按值传递时,值会被复制到一个局部变量(就是arguments的一个槽位).

基本数类型
function addNum(value) {  //num的值复制到value,在函数内使用,互不影响
             value+=10
             return value
          }
          let num=10
        let result=  addNum(num)
        console.log(num,result);//10,20
引用数据类型
 function setName(obj) {
            obj.name = 'xiaohua'
        }
        let person = { name: 'liming' }
        setName(person)
        console.log(person);//'' {name: "xiaohua"}
 function setName(obj) {
            obj.name = 'xiaohua'
            obj = {}
            obj.name = "huahua"
            //如果person是按引用传递,那么name应当被修改,但是并没哟偶
            //这表明函数中参数的值改变后,原始的引用person依然没有改变
        }
        let person = { name: 'liming' }
        setName(person)
        console.log(person);//'' {name: "xiaohua"}
        console.log(person.valueOf());// {name: "xiaohua"}

函数内部obj与person指向同一个对象,所以,即使对象是按值传递进函数的,obj也会通过引用访问对象.
而且obj指向的对象保存在全局作用域的堆内存上,所以会为person添加name

      let person = { name: 'liming' }
     function changeName(obj) {
        obj={sex:'girl'}
        console.log(obj);// {sex: "girl"}
     }
     changeName(person)
     console.log(person);
     // {name: "liming"}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值