1:前面讲到了函数的基本的定义和基本的使用,接下来我们看看函数在具体的使用中的一些比较特殊的地方,和其他的语言的一些比较大的差异性。
-- 函数的实参的个数可以和形参的个数不同
-- 函数可以嵌套定义
-- 函数名(引用)可以作为方法的实参
2:具体差异看下面的示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>函数的特殊使用</title>
<script type="text/javascript">
//1:函数的实参的个数可以和形参的个数不同
//javascript 语言上感觉不是很严格,很多内容可以省略,比较语句末尾的分号,即使不写也可以执行。
//当实参的个数和形参的个数不一致的时候,不会报错。
//定义求三个数的和的方法
function sum(a , b , c){
return a + b + c;
}
//测试
//多了一个实参,最后一个参数直接被忽略
alert(sum(1,2,3,4));//6
alert(sum(1,2,3));//6
//下面的三种情况一样,因为c没有被赋值,所以结果是NaN
alert(sum(1,2));//NaN
alert(sum(1));//NaN
alert(sum());//NaN
//2:函数可以嵌套定义
function fun1(){
//可以在方法体中再次定义方法,可以认为方法是一个对象。
//方法体中可以定义变量,和方法,也就是相当于方法的属性和功能。
//嵌套的方法只能在方法体中使用。
var a = 1;
function inner(){
alert("我是方法体中定义的方法!");
}
//使用嵌套的方法。如果想要该嵌套方法被执行,那么必须调用fun1().才可以。
inner();
}
//测试方法的嵌套定义。inner会被执行。
fun1();
//3:函数名(引用)可以作为方法的实参
//方法在JavaScript中是对象的实例,那么方法名就是对象的引用,指向对象的指针。
//方法名可以作为方法的实参使用。
function fun(){
alert("hello function");
}
//定义了一个方法,有一个参数a,那么上面的方法 fun 可以作为实参传入。
function test(a){
//在这里a既然是方法,那么()作为方法的执行符,可以用来让a方法得到执行。
a();
}
//输出 hello function
test(fun);
//4:补充:
function test1(a){
alert(a);
}
//如果不加小括号,没有执行符,那么输出的内容为方法的定义的整体代码形式。
test1(fun);//function fun(){alert("hello function");}
//如果实参传递的是整个方法的调用,那么是将方法的返回值作为实参。
//也就是该方法会先执行fun() 输出 hello function,然后将该方法的返回值传入
//因为该方法没有返回值,所以返回undefined。最终输出undefined。
test1(fun());
</script>
</head>
<body>
</body>
</html>
PS:笔者有大量的学习资料:java、python、大数据、人工智能、前端等。需要的小伙伴请加群:711408961
笔者的b站中有一些教学视频分享。感兴趣的小伙伴可以关注:https://space.bilibili.com/412362068