参数的传递

我们都应该知道所谓的编程语言就是通过一系列的函数变换,实现数据的传输,变换,最终呈现出我们所需要的效果。可以说无论是什么编程语言数据的传递都是弥足珍贵的。可是我们在传输数据的过程中不能仅仅是简单的传输,我们需要一种载体来承接我们传输的内容,也就是我要说的参数。

参数有形参和实参之分,所谓的实参可以理解为实际参数,就是我们通过函数想要传递的内容,而形参呢?简单的说就是形式参数,就是一个桥梁,用它去接收我们传递过来的内容,并存入到储存单元中,然后释放形参。那么实参和形参是怎样传递的呢?在他们的传递过程中都发生了那些变化?都要遵循那些规则呢?

(1).参数的传递分为2种:

1.值传递

顾名思义,值传递就是把数值传递给形参,也就是说我们只需要随便拿出一个形参来接受这个值就好了,当我门在函数内部修改形参,比如形参的名字,是不会影响实参的数值的。

从例子中很容易看出,虽然改变了形参的内容,结果未发生任何变化。

2.引用传递

和值传递不同,引用传递传递的是内容的地址。在使用引用传递时,计算机是先找到这个实参的地址,然后把地址传递给形参,紧接着把地址下的数据依次传入到形参开辟的空间中去,所以说一旦我们的在函数内部修改了形参,计算机就无法找到对应的地址空间,这样输出的就不是我们所需要的数据。

(2).形参和实参的数目问题:

1.调用函数传递的实参必须与定义的形参的个数是对应的;(在JavaScript中没有这项要求)

2.超出形参数的实参不进行传递;

3.如果没有对应的实参传入,形参的类型定义为undefined;

所有的编程语言都需要满足这3带点特征,但是在JavaScript中,实参和形参的数量可以不对应。

(3).参数传递时主要应用的函数

arguments函数:在函数体内,标识符arguments是指向实参对象的引用,一旦我们把实参传递给形参是,就会创建一个arguments对象;它的作用就是把我们传递的参数,以数组的形式                                存储在对像名为arguments的内存空间内,注意,arguments绝不是一个数组,他是一个对象。

arguments的应用:1.虽然他不是一个数组,但是我们仍然可以把它当做数组来理解,通过arguments我们可以获取里面的一个元素,或者获取传入实参的个数。

2.对于超出形参个数之外的实参,arguments同样接收超出的实参,并存储起来,这是就方便我们来调用其中的元素了。使用函数arguments[i] 来调用;

3.arguments.length函数是用来计算传递的实参个数;

4.argumrnts每个函数都会有,因此,arguments只会在自己内部找自身的arguments,无法引用到外层的arguments。

参数的传递基本的内容也就是这些了,只要理解清楚他的传送机制,我们在编写程序时就不会感觉手足无措了,认真的看完这篇文章,我想对于参数的传递机制,你会有一个更清楚的认识,不能说让你大彻大悟,但总会有一些收获。(ps:文章有些短,希望不要被告知移除博客首页啊!!!!)

时间: 2024-08-11 10:23:59

参数的传递的相关文章

js函数中参数的传递

先看一道JS的笔试题: var setObj=function(o){ o.name="xiaoming"; o={}; o.name="xiaohong"; } var p={name:"xixi",age:24}; setObj(p); console.log(p); 答案是{name:xiaoming,age24}: 在JavaScript中函数参数默认为引用类型. 在阅读本章节之前建议参阅一下两章节:1.值类型可以参阅javascript

[ jquery 过滤器nextAll(expr) ] 此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,此方法参数只能传递表达式,无法传递其他类型

此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,此方法参数只能传递表达式,无法传递其他类型 可以使用此方法向里面传递表达式的方法实现和jqueryObj.next()相同的效果 实例: <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta

[ jquery 过滤器next(expr) ] 此方法用于在选择器的基础之上搜索被选元素的后一个同级元素,此方法参数只能传递表达式,无法传递其他类型

此方法用于在选择器的基础之上搜索被选元素的后一个同级元素,此方法参数只能传递表达式,无法传递其他类型: 实例: <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keyword1,key

JavaScript中参数的传递

变量类型 了解参数的传递之前我们来复习下变量的类型,JavaScript中的变量有5个基本数据类型(Undefined, Null, Boolean, Number, String)和引用数据类型(Object,Function,Array等). 基本类型和引用类型的区别 // 声明一个String类型的变量 var str = "string"; // 声明一个引用类型的变量,并添加属性 var person = new Object(); person.name = "J

vsnprintf的使用以及c可变参数的传递机制

int vsnprintf (char * s, size_t n, const char * format, va_list arg ); cplusplus.com给出的解释是:Write formatted data from variable argument list to sized buffer 意思是把格式化的字符串format的最多n位字符写入缓冲区s中,format的参数列表为arg 其返回一个整型数ret,当且仅当ret非负,且ret小于n,表示函数运行成功,把ret个字符

Java中,函数参数的传递,是值传递还是引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递. 可以这么理解:有一个Person(name="S"),作为参数传给一个方法,在此方法中将此Person重新设置name=“B”,那么有一下结论 ①这个Person还是这个Person,一直都是他,但是他的名字被改了,不管是原来的引用还是方法里的引用,引用的都是一个对象,所以,所有引用的值都变了 ②如果在方法中重新new了一个Person赋给参数,

web页面中参数的传递方法

在web页面中参数的传递方法多样,主要有以下几种: Viewstate,Querystring,Session, Application,Cookie,Cache. Viewstate: 特点:服务启启动的各种控件的视图状态:包括控件的所有属性值:Enableviewstate可以启用和禁用视图状态:        优点:防止新产生一个页面实例后,丢失前一个页面的状态信息: 例如:在用户登录注册验证过程中,无须使用导致服务器往返行程的代码,我们只需要在客户端进行验证就可以了.另外有些控件的初始化

Shell编程基础教程7--脚本参数的传递

7.脚本参数的传递    7.1.shift命令        简介:            shift n        每次将参数位置向左偏移n位        例子 #!/bin/bash usage() { echo "usage:`basename $0` filenames" } totalline=0 #下面的语句中 $# 表示参数的个数 if [ $# -lt 2 ] then usage fi while [ $# -ne 0 ] do line=`cat $1 |

gcc参数-l传递顺序错误导致`undefined reference&#39;的一点小结

刚才编译一个pthread的单文件程序, 使用的命令行是: gcc -o thread1 -lpthread thread1.c 结果报错: 1 $ gcc -o thread1 -lpthread thread1.c 2 /tmp/ccNqs6Bh.o: In function `main': 3 thread1.c:(.text+0x49): undefined reference to `pthread_create' 4 thread1.c:(.text+0x5f): undefined

verilog中defparam的用法 (verilog调用底层模块(只改变)参数的传递)

当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数 语法:defparam path_name = value ; 低层模块的参数可以通过层次路径名重新定义,如下例: module top ( .....)input....;output....;defparam U1 . Para1 = 10 ;M1 U1 (..........);endmodulemodule M1(....);