javascript 函数参数传递

在某个听书软件上发现了一本《javascript高级程序设计》的书籍,每次睡觉前时候都会听听,稀稀拉拉听了一年多,每次都会睡着耽误了很多进度。过年这几天又听了听,感觉js函数中参数的传递这块比较好玩,总结写出来。

  • 基本类型值 比如Undefined,Null,Boolean,Number,String。
  • 引用类型值,比如Object,Array,Function,Date等。

所以传递也分为两种了,下面开始基础知识代码部分:

基本类型复制
var num1 = 10;
var num2 = num1;
console.log(num2);//10
这两个是完全一样的,修改任何一个都不会影响另外一个。
引用类型复制
var obj1 = {
  name : "111"
};
var obj2 = obj1;
console.log(obj2.name); //111
obj2.name = "222";
console.log(obj1.name); //222
这两个是地址指针完全一样的,修改任何一个都会影响另外一个。
如果有什么不懂得可以去看我的另外有关对象深浅复制的笔记。
这里不过多解释。

函数参数的传递

《javascript 高级程序设计》上是这样叙述参数传递的:所有函数的参数都是按值传递的,也就是说把函数外部的值复制给函数内部的参数。

基本类型作为参数传递
var count = 10;
function num(num1){
   num1 = 1;
   return num1;
}
var result = num(count);
console.log(result);//1
console.log(count);//10,并未变成1
对象作为参数传递   专注一点   看内存有没有改写
var person  = {
    name : "Tom"
};
function obj(peo){
    peo.name = "Jerry";
    return peo;
}
var result = obj(person);
console.log(result.name);// Jerry
console.log(person.name);// Jerry

看到这里是不是有蒙了,没错,结果表明这是引用关系(指针)的复制方式。
但是,仔细看下面例子:
var person = {
    name : "Tom"
}; 
function obj(peo){
    peo = {
       name : "Jerry"
    };
    return peo;
}
var result = obj(person);
console.log(result.name);// Jerry
console.log(person.name);// Tom

仔细看你会发现不同,下面没有像上面使用peo.name = "Jerry"
下面而是直接写出来一个对像
peo = {
       name : "Jerry"
    };
在函数中重新定义了一个对象,也就是现在堆内存中有两个对象
所以此时上面和下面是是两个不同的返回值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值