引用类型作为函数参数何解

更新日期: 2019-01-03阅读量: 1429标签: 函数

在向函数传递引用类型的参数时,相当于把引用类型的地址复制给函数内的一个局部变量,所以局部变量和传入的参数会指向内存中的同一个对象。  局部变量的变化也会映射到传入参数

function setAge(obj){
  obj.age = 20;      
}
var person = new Object();
setAge(person);
console.log(person.age); // 20


解释: 我们创建了person对象,但是我们创建的person并没有age属性,然后我们通过setAge方法给函数内的局部变量obj添加了age属性,但是函数内局部变量obj的变化会映射到传入参数,这说明两者在都指向内存中的同一个地址。

然而引用类型作为参数传递并不说明引用类型传参是按引用传参的

function setAge(person){
  obj.age = 20;
  obj = {
     age: 30
  };
}
var person = new Object();
setAge(person);
console.log(person.age); // 20


解释:我们在函数内让person重新指向一个新的对象,等于切断了函数内局部变量obj与传入参数person的联系,即局部变量指向一个新的地址。

如果是按引用类型传递的话,那么全局变量person就会与局部变量obj指向同一个地址,那么person.age也应为30,由于不是按引用传递的,所以全局变量person还是指向原来的地址


来自:https://www.cnblogs.com/jhaosun/archive/2019/01/03/params.html


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/1762

ES6函数的扩展

在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。与解构赋值默认值结合使用参数默认值可以与解构赋值的默认值结合使用。

CSS calc()函数的用法

CSS3 的 calc() 函数允许我们在属性值中执行数学操作。例如,我们可以使用 calc() 指定一个元素宽的固定像素值为多个数值的和。如果你使用过 CSS 预处理器,比如 SASS

学习函数式编程 Monad

在函数式编程中,Monad 是一种结构化程序的抽象,我们通过三个部分来理解一下。Monad 定义,Monad 使用场景,Monad 一句话解释

Extjs renderer函数

昨天提到了改变grid中 行的背景颜色,其实还有一个更简单的方法,就是利用renderer:function(){}函数,renderer 函数是一个拦截者模式,用于改变渲染到单元格的值和样式。

Js方法/函数重载的实现

函数重载这项特性允许创建数项名称相同但输入输出类型或个数不同的子程序函数重载是强类型语言的特性,虽然 js 是弱类型语言,我们可以通过一些方法实现函数重载。

JavaScript中函数的调用和this的指向

普通函数调用 this 指向 window,方法调用 this 指向 调用该方法的对象,作为构造函数的调用 构造函数内部的this指向由该构造函数创建的对象,作为事件的处理函数 触发该事件的对象

JavaScript 函数式编程

我理解的 JavaScript 函数式编程,都认为属于函数式编程的范畴,只要他们是以函数作为主要载体的。

高阶函数 - Higher Order Function

一个函数 如果输入参数包含函数 或 返回值包含函数,就称为高阶函数。按fn与fn功能是否一致【即相同输入是否始终对应相同输出】,把这类高阶函数的作用分为两类:

JS开发常用工具函数

isStatic:检测数据是不是除了symbol外的原始数据;isPrimitive:检测数据是不是原始数据;isObject:判断数据是不是引用类型的数据

js常用方法大全_前端常用Js函数封装

这是我在实际开发中常用的一些Js函数方法,今天总结了一下,以便以后查询,有需要的小伙伴可以参考下。包括:加载js || css || style、获取url参数、本地存储、cookie操作【set,get,del】、Js获取元素样式【支持内联】

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!