js中的函数参数传递原则

Posted 考拉的墨尔本

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中的函数参数传递原则相关的知识,希望对你有一定的参考价值。

js中函数参数值传递和引用传递:
一.函数传递值类型:
代码实例如下:

function addNum(num)
 
 num+=10; 
 return num; 
 
var num=10; 
var result=addNum(num); 
console.log(num);
console.log(result);

以上代码的弹出值分别为:10和20,下面进行一下分析:
声明变量num并复制为10,这个是num是一个值类型,当为函数传递参数的时候,是将此值复制一份传递给函数,所以在函数执行之后,num本身的值并没有被改变,函数中被改变的值仅仅是一个副本而已。
二.函数传递引用类型:

function setName(obj)
 
  obj.name="青岛新锐"; 
 
var web=new Object(); 
web.name="蚂蚁部落";
setName(web); 
console.log(web.name);

以上代码的弹出值是:“青岛新锐”,下面进行一下分析:
声明一个对象web,它是一个引用类型,当为函数传递参数的时候,是传递的web对象的引用,也就是此对象的内存地址,所以在函数中修改属性的对象就是函数外面创建的对象本身。
三.加深理解:

function setName(obj)
 
  obj.name="青岛新锐"; 
  obj=new Object(); 
  obj.name="蚂蚁部落"; 
 
var web=new Object(); 
setName(web); 
console.log(web.name);

以上代码的弹出值是:青岛新锐,很多人可能会以为将会弹出“蚂蚁部落”,下面进行一下简单的分析:
在函数外面创建一个对象,并将对象的引用赋值给变量web,web中存储的是对象在内存中的存储地址,当为函数传递参数时,就是传递的在函数外面创建的对象的地址。在函数中,为外面创建的对象创建一个自定义属性name并赋值为“青岛新锐”,然后又创建一个新的对象,并将新对象的地址赋值给obj,这个时候obj指向的并不是函数外面创建的对象,所以外面对象name属性不会被改变。

函数内创建object对象不会改变外面的属性值 web.name直接读取函数的属性

以上是关于js中的函数参数传递原则的主要内容,如果未能解决你的问题,请参考以下文章

js--函数参数(你可能不知道的参数传递)

js中的参数传递

js中的类型和函数参数传递类型问题

js节流函数中的参数传递

JS怎么样调用IOS并且传递参数?

函数名作为参数传递与回调函数