博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript参数按值传递
阅读量:6422 次
发布时间:2019-06-23

本文共 880 字,大约阅读时间需要 2 分钟。

hot3.png

JavaScript参数按值传递

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

你可能感兴趣的文章
我的友情链接
查看>>
ifconfig:command not found的解决方法
查看>>
计算机是怎么存储数字的
查看>>
Codeforces Round #369 (Div. 2) A. Bus to Udayland 水题
查看>>
adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)
查看>>
C++标准库简介、与STL的关系。
查看>>
Spring Boot 3 Hibernate
查看>>
查询EBS请求日志的位置和名称
查看>>
大型机、小型机、x86服务器的区别
查看>>
J2EE十三个规范小结
查看>>
算法(第四版)C#题解——2.1
查看>>
网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
查看>>
大数据开发实战:Stream SQL实时开发一
查看>>
C++返回引用的函数例程
查看>>
dll 问题 (转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>