js中什么是形参和实参
日期:2019-01-19
来源:程序思维浏览:3199次
参数有形参(parameter)和实参(argument)的区别,形参相当于函数中定义的变量,实参是在运行时的函数调用时传入的参数。
说明白就是,形参就是函数声明时的变量,实参是我们调用该函数时传入的具体参数。
例子:
声明函数add时,a,b就是形参。调用函数add(1,2) 1,2就是实参。
function add(a,b) {
return a + b
};
add(1,2);
形参和实参的实现原理剖析:
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数:
<script type="text/javascript">
function one(a,b,c) {
this.x = a;
console.log(a);
}
one(1);
</script>
我们传递的数字只有一个1,但是形参那里有abc三个。这分明对不上啊不是吗?
这个时候如果我们查看b,c的话会显示undefined。ps:比如console.log(b)。
当然啦,本来就没有这两个数。怎么找给你?
那面对这种实参和形参对不上号的情况,JS是怎么实现的呢?让我们来看一段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>JavaScript中函数的形参和实参的区别</title>
</head>
<body>
<script type="text/javascript">
function one(a,b,c) {
return one.length;
}
function two(a,b,c,d,e,f,g){
return arguments.length;
}
console.log(one()); //3
console.log(two()); //0
</script>
</body>
</html>
这里我们在one函数里面返回了one.length,在two函数里面返回arguments.length。可能你已经发现了,输出的one()返回了one.length就是形参的数量,而argument.length就是实参的数量。
瞬间秒懂了有木有?
甚至我们可以用arguments[0]取到实参的数字。
但是为什么没有形参的数字可以用类似数组的方式这样表示呢?好吧,我知道你是处女座的凡事要求对称。除非你形参是数组你可以这样用。不然在函数里面我们就只能用形参的名字来取得实际的参数了。
在C#,Java里面对参数类型和个数相对JS来说要求十分严格,一点对不上就报错了。而JS就因为有这样的设计而可以变成相对灵活的语言。
上述方法就是JS依赖的不强制对形参和实参规定个数相等的实现了。至于类型的相同,JS什么类型都可以写成var a = ……,要类型何用?所以才说JS是一种弱类型的语言嘛!
说明白就是,形参就是函数声明时的变量,实参是我们调用该函数时传入的具体参数。
例子:
声明函数add时,a,b就是形参。调用函数add(1,2) 1,2就是实参。
function add(a,b) {
return a + b
};
add(1,2);
形参和实参的实现原理剖析:
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数:
<script type="text/javascript">
function one(a,b,c) {
this.x = a;
console.log(a);
}
one(1);
</script>
我们传递的数字只有一个1,但是形参那里有abc三个。这分明对不上啊不是吗?
这个时候如果我们查看b,c的话会显示undefined。ps:比如console.log(b)。
当然啦,本来就没有这两个数。怎么找给你?
那面对这种实参和形参对不上号的情况,JS是怎么实现的呢?让我们来看一段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>JavaScript中函数的形参和实参的区别</title>
</head>
<body>
<script type="text/javascript">
function one(a,b,c) {
return one.length;
}
function two(a,b,c,d,e,f,g){
return arguments.length;
}
console.log(one()); //3
console.log(two()); //0
</script>
</body>
</html>
这里我们在one函数里面返回了one.length,在two函数里面返回arguments.length。可能你已经发现了,输出的one()返回了one.length就是形参的数量,而argument.length就是实参的数量。
瞬间秒懂了有木有?
甚至我们可以用arguments[0]取到实参的数字。
但是为什么没有形参的数字可以用类似数组的方式这样表示呢?好吧,我知道你是处女座的凡事要求对称。除非你形参是数组你可以这样用。不然在函数里面我们就只能用形参的名字来取得实际的参数了。
在C#,Java里面对参数类型和个数相对JS来说要求十分严格,一点对不上就报错了。而JS就因为有这样的设计而可以变成相对灵活的语言。
上述方法就是JS依赖的不强制对形参和实参规定个数相等的实现了。至于类型的相同,JS什么类型都可以写成var a = ……,要类型何用?所以才说JS是一种弱类型的语言嘛!
精品好课