javascript---传参:不能传递引用类型

总结:

• 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

• 按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

 



1.传递基本类型的值

    var box='lee';                    //传递基本类型的值,参数的值和外面的值无关
    function one(box){
        box=123;
    }
    one(box);
    alert(box);                //lee

解答:这个大家应该都懂,形参不影响实参。

2.传递引用类型(注意不是按引用类型传递)

1     var box=new Object();            //传递引用类型,不是按引用传递,参数的值是地址
2     function one(box){
3         box.name='lee';
4         var box=new Object();
5         box.name='kkk'
6     }
7     one(box)                
8     alert(box.name);        //lee

解答:这里大家可能有疑惑,为什么不是kkk。首先,函数参数是引用类型则传递其地址,即是副本,都是指向同一个值,只是地址不同,然后再在顺着地址找到其值。第3行,添加了name属性,第4行
new了一个对象,此时box指向新的值,此时赋值kkk不再会影响原来的函数外的box值,因为地址指向的值都不相同了。

注意:按引用传递的话,是将整个box对象传递进去,已经不是副本,执行第4行,之前的box值会被覆盖掉,并且box.name='kkk'了。

 

 

 

 结论:对于数字、字符串等是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量。
 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组)的地址。
 当函数改变这个地址指向的对象(数组)的内容时,同时也改变了函数外部变量指向的对象(数组)的内容;当函数改变的是变量的地址时,
 实际就与函数外部的变量失去了联系,变成了完全不同的对象了,不会对函数外部对象造成改变。
 
 
 基本类型值传递的是值,直接访问栈的值
 引用类型传递的是地址,如果在函数内的地址未被改变,则实参会随函数的执行改变而改变;如果地址改变了,则不再与实参有关

 

转载于:https://www.cnblogs.com/GacentJohn/p/5299005.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
router-link可以通过query方式或params方式来。 如果使用query方式,在router.js内的路由配置中,可以在path后面使用query来定义数名和数值。例如: ```javascript { path: '/check', name: 'Check', component: Check } ``` 在模板中的router-link中,使用to属性来指定路由路径和query数。例如: ```html <router-link :to="{path: '/check', query: {name:'zhouzhou',num:6}}"> xxx </router-link> ``` 在接收数的页面,可以使用this.$route.query来获取数值。例如: ```javascript alert(this.$route.query.name); alert(this.$route.query.num); ``` 如果使用params方式,在route.js内的路由配置中,可以在path后面使用:数名的形式来定义数。例如: ```javascript { path: '/check/:name', name: 'Check', component: Check } ``` 在模板中的router-link中,使用to属性来指定路由名称和params数。例如: ```html <router-link :to="{name: 'Check', params: {name:'zhouzhou',num:8}}"> xxx </router-link> ``` 在接收数的页面,可以使用this.$route.params来获取数值。例如: ```javascript alert(this.$route.params.name); alert(this.$route.params.num); ``` 这样就可以根据不同的需求选择合适的方式来传递数了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue项目——router-link 多种方式](https://blog.csdn.net/qq_40556950/article/details/102816381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [router-link如传递数](https://blog.csdn.net/Frazier1995/article/details/115692104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值