回调,闭包,return简单总结

1 回调函数:一个函数的 函数名 作为另外一个函数的 实参 传入

2 函数的闭包:一个函数是另外一个函数的返回值

3 函数名代表函数整体,函数名+()代表函数的执行

形参可以传入的值,形参可以传入任何类型的值,包括简单数据类型和复杂数据类型,其中复杂数据类型包括了函数

        function fn (num1,num2,rule){
            return rule(num1,num2);
        }

        function rule1(num1,num2){
            return num1 + num2 ;
        }
        function rule2(num1,num2){
            return num1 - num2 ;
        }
        function rule3(num1,num2){
            return num1 * num2 ;
        }
        function rule4(num1,num2){
            return num1 / num2 ;
        }
        console.log(fn(3,6,rule1));
        console.log(fn(3,6,rule2));
        console.log(fn(3,6,rule3));
        console.log(fn(3,6,rule4));

控制台输出:
9
-3
18
0.5

因为在定义函数fn的时候,rule(num1,num2),中 rule 被定义为只能传入函数,所以只能在 形参rule的位置传入实参是个函数,而rule函数定义了num1 和 num2 是什么类型的值

    console.log(fn(null,6,rule1));  6 
    console.log(fn(undefined,6,rule1));  NaN
    console.log(fn(rule1(8,4),rule2(4,2),rule3))   24 
    console.log(fn(rule1(8,4),rule2(4,2),rule3 ,rule4))    24 

多传进来的值会被忽略

需要注意的是函数名可以被传入,因为在创建函数的时候,函数名指向了堆内存中的地址,传入该地址,则代表引用该函数。

一旦加了 ( ).就代表调用并且执行了该函数

    console.log(fn(3,6,rule1()));

这行代码会报错,因为 rule1() 被直接执行了,此时传入的是 rule1 () 执行后的返回值,
函数名代表函数整体,函数名+()代表函数的执行小案例解析
(1) 返回函数名

console.log(fn());
function fn(){

    return fn1;

}
function fn1(){
    console.log("这是函数闭包的运用");
}

控制台输出:
function fn1(){
console.log(“这是函数闭包的运用”);
}
(2) 返回 函数名+()

console.log(fn());
function fn(){

    return fn1;

}
function fn1(){
    console.log("这是函数闭包的运用");
}

控制台输出:
这是函数闭包的运用

4 注意:

A 函数不调用则不执行,函数名代表函数整体,可以进行输出,打印,等操作,也可以作为其他函数的参数传入
B 函数名+()则代表该函数被执行了,无论其被打印、输出,或者被其他函数调用,或者作为其他函数的返回值,结果都是其执行之后所返回的内容
C 函数名+() 执行之后返回值得内容有以下几种情况:

a 当函数体内没有写 return 的时候,没有返回值,如果输出console.log(fn());(fn()代表一个定义过的函数)结果为undefined ;
b 当函数体内写了 return 之后,后面没有跟内容,默认返回值是 undefined
c 函数体内写了 return ,后面也跟了内容,那么返回后面跟的内容;
d 函数语句执行到 return 之后,后面的语句不会执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值