值传递和引用传递——javascript

1.javascript
所有函数的基本类型参数都是按值传递,而Object类型是共享传递(call by share)

function change(a,b,c){
    a = a +1
    b.value = 2
    c = {value:3}
}
var a = 1
var b = {value:1}
var c = {value:1}
change(a,b,c)
console.log(a,b,c)//结果是1,{value:2},{value:2}

a是值传递,函数上下文中的a改变对外面的a不造成任何影响
b是共享传递,函数上下文中的b和函数外的b指向的是同一个对象(可以理解为指向同一个地址),函数内b指向的对象改变了属性值,函数外的b也指向的是同一对象,该对象属性值发生了变化。
c是共享传递,函数外的c指向的对象,传给了函数上下文中的c,函数执行时,刚开始 函数中的c是指向该对象的,但是赋值操作后,函数上下文中的c又指向了另一个对象,并没有对赋值前的对象做出改变。

参考了stackflow,链接如下

https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language?rq=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,896评论 18 139
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,895评论 0 38
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,635评论 0 5
  • 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-c...
    jaysoul阅读 484评论 0 0
  • 也许像这种随笔,只是随意碎碎念一下,所以,题目都变成了,写在清晨or深夜。-------题记。 不要问我为什么四点...
    王大睿阅读 312评论 0 0