美文网首页
js中一个对象当做参数传递时候?

js中一个对象当做参数传递时候?

作者: 转移到CSDN名字丹丹的小跟班 | 来源:发表于2021-03-20 22:31 被阅读0次

在平时使用过程中,好像把对象直接传递给函数做参数好像没啥

function changeObj(obj) {
  obj.name = 'ff'
}
let obj = new Object()
obj.name = 'dandan'
changeObj(obj)  
console.log(obj)  // {name: 'dandan'}

从上述代码看出,当对象作为参数传递给函数并且在函数内部发生改变时,对象本身也会改变。复合引用对象的特性。继续看下面的代码

function changeObj(obj) {
   obj.name = "fufu";
   obj = {age: 999}
}
let obj = new Object();
obj.name = 'dandan'
changeObj(obj)
console.log(obj);  //{name: 'fufu'}

上面代码惊奇的打印出了{name: 'fufu'},而我们在函数里明明已经将obj赋值了一个新对象,却好像没有什么效果。

解析:其实之所以有这样的变化,还是对象的引用类型特性造成的。在第一个例子里,将对象传递给函数做参数,实际意义上是传递了一个堆内存地址给他,函数里面外面指向的是同一个内存地址,改变的自然也就是同一个对象。

而在例子二里,obj.name = "fufu";改变的也是同一个对象,但执行到 obj = {age: 999}的时候,obj被赋值了一个新的对象,也就是说,一个新的内存地址被赋予他,切断了与之前地址的联系。但是却并没有删除或改变原本的内存地址。所以外面的obj依旧指向的是原本的地址,而函数内部的obj指向的是刚刚创建的局部变量,并且函数执行完成后就自动销毁。所以外面打印出的依旧是原本的对象。

相关文章

  • js中一个对象当做参数传递时候?

    在平时使用过程中,好像把对象直接传递给函数做参数好像没啥 从上述代码看出,当对象作为参数传递给函数并且在函数内部发...

  • Blocks

    Block可以当物件传递,可以变成某个对象的property,或是当做method/function 的参数传递,...

  • Python元类

    类也是对象 在Python中一切都是对象,类也不例外。所以可以对类进行以下操作。1.可以当做参数传递2.可以添加属...

  • jingjing分享-提纲&答案

    js基础知识 值传递,引用传递对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(...

  • 小程序点击事件传自定义参数数据

    小程序点击事件会传递一个事件对象,js中参数接受。 这个对象结构: currentTarget 事件属性返回其监听...

  • vue中js与ios交互postMessage问题

    window.webkit.[ios注入的对象].[方法名].postMessage([js传递给ios的参数]) ;

  • Block使用的一些注意事项&&不常见的使用方法

    Block 也是一种 Objective-C 对象,可以用于赋值,当做参数传递,当做返回值,也可以放入 NSArr...

  • Python对象的拷贝

    Python赋值操作或函数参数传递,传递的永远是对象引用(即内存地址),而不是对象内容。在Python中一切皆对象...

  • 【python】 深拷贝和浅拷贝

    Python赋值操作或函数参数传递,传递的永远是对象引用(即内存地址),而不是对象内容。在Python中一切皆对象...

  • 小程序wx.parse解析字符串报错

    页面跳转参数传递先用JSON.stringify()处理对象,然后URL编码 接收参数页面,URL解码之后,再JS...

网友评论

      本文标题:js中一个对象当做参数传递时候?

      本文链接:https://www.haomeiwen.com/subject/qjgwqltx.html