1:JavaScript中的函数的参数问题我们需要注意几个问题
-- 实参和形参个数可以不一致
-- 获得形参的个数和实参的个数
-- 如何访问实参
-- 函数的递归的实现
2:JavaScript 中的函数的调用过程中,实参的个数可以和形参不一致。也不会报错。但是这样会存在一定的安全隐患。当然可以通过一些方式来解决问题。
3:可以通过:[函数名.length] 来获得函数的形参的个数。在函数中,参数的底层是使用数组来实现的,实参的接收是通过数组的。该数组为:arguments对象。可以通过[arguments.length]来访问实参的个数。也可以通过 [arguments[.]]来访问具体的实参。
4:可以通过 arguments.callee 来访问当前函数自身,通常使用它来实现递归操作。
5:看示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>函数的参数</title>
<script type="text/javascript">
//1:-- 实参和形参个数可以不一致
function fun(a,b,c){
return a + b;
}
//调用
alert(fun(1));//NaN
alert(fun(1,2));//3
alert(fun(1,2,3));//3
//2 : -- 获得形参的个数和实参的个数
function fun1(a,b,c){
//访问形参的个数
alert(fun.length);//3
//访问实参的个数
alert(arguments.length);//2
}
//测试
fun1(1,2);
//-- 如何访问实参
function fun2(a,b,c){
//访问实参
//遍历所有的实参
for(let i=0;i<arguments.length;i++){
alert(arguments[i]);
}
}
//测试
fun2(4,5,6);//4,5,6
//-- 函数的递归的实现
//接下来实现求n的阶乘,使用递归实现
function fact(n){
if(n == 1){
return 1;
}else {
//使用这样的方式可以实现求n的阶乘。但是存在安全隐患。
return n * fact(n-1);
}
}
//测试
alert(fact(5));//120
//f也指向了fact
var f = fact;
alert(f(5));//120
//如果
fact = null;
alert(f(5));//这样就报错了Uncaught TypeError: fact is not a function
//所以把上面的递归实现修改为下面
function fact1(n){
if(n == 1){
return 1;
}else {
//使用这样的方式可以实现求n的阶乘。 arguments.callee 代表当前函数本身
return n * arguments.callee(n-1);
}
}
var f = fact1;
fact1 = null;
alert(f(6));//720
</script>
</head>
<body>
</body>
</html>
PS:笔者有大量的学习资料:java、python、大数据、人工智能、前端等。需要的小伙伴请加群:711408961
笔者的b站中有一些教学视频分享。感兴趣的小伙伴可以关注:https://space.bilibili.com/412362068