js中函数参数的值传递和引用传递
来源:互联网 发布:win10自动安装软件 编辑:程序博客网 时间:2024/05/16 13:41
JavaScript 函数参数
JavaScript 函数对参数的值(arguments)没有进行任何的检查。
函数显式参数与隐藏参数(arguments)
在先前的教程中,我们已经学习了函数的显式参数:
functionName(parameter1, parameter2, parameter3) { code to be executed}
函数显式参数在函数定义时列出。
函数隐藏参数(arguments)在函数调用时传递给函数真正的值。
参数规则
JavaScript 函数定义时参数没有指定数据类型。
JavaScript 函数对隐藏参数(arguments)没有进行检测。
JavaScript 函数对隐藏参数(arguments)的个数没有进行检测。
默认参数
如果函数在调用时缺少参数,参数会默认设置为: undefined
有时这是可以接受的,但是建议最好为参数设置一个默认值。
function myFunction(x, y) { if (y === undefined) { y = 0; } }
更简单的方法:
function myFunction(x, y) { y = y || 0;}
Note 如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。
如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用。
Arguments 对象
JavaScript 函数有个内置的对象 arguments 对象.
argument 对象包含了函数调用的参数数组。
通过这种方式你可以很方便的找到最后一个参数的值:
实例
x = findMax(1, 123, 500, 115, 44, 88);function findMax() { var i, max = 0; for (i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max;}
或者创建一个函数用来统计所有数值的和:
实例
x = sumAll(1, 123, 500, 115, 44, 88);function sumAll() { var i, sum = 0; for (i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum;}
通过值传递参数
在函数中调用的参数是函数的参数。
如果函数修改参数的值,将不会修改参数的初始值(在函数外定义)。
函数参数的改变不会影响函数外部的变量(局部变量)。
代码实例如下:
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本身的值并没有被改变,函数中被改变的值仅仅是一个副本而已。
通过对象传递参数
在JavaScript中,可以引用对象的值。
因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性可作用于函数外部(全局变量)。
实例:
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中函数参数值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- js 中参数传递(值传递和引用传递)
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- javascript中,函数参数中的值传递和引用传递
- Java函数参数的值传递和引用传递
- C或C++中函数的参数传递包括:值传递、指针传递、引用传递
- C或C++中函数的参数传递——值传递、指针传递、引用传递
- 判断三角形的面积及类型(多重选择)
- 欢迎使用CSDN-markdown编辑器
- thinkphp 配置的权限问题
- iOS 进阶(二)Objective-C 底层原理
- 字节流与字符流的区别详解
- js中函数参数的值传递和引用传递
- 装饰设计模式
- 02_核心概念--02_布局和容器
- 数据库sql语句笔试题--包含创建数据库、表、插入记录、查询等操作
- Linux根文件之SysV系统启动方式总结
- PDO连接
- 程序员面试金典--面试28之改变几个位,才能将整数A转变成整数B。
- Win7系统下安装Ubuntu14.04超级详细图文教程
- 分页功能