特殊函数:匿名函数的两种应用(①回调函数②自调函数)

特殊函数

匿名函数

JavaScript可以将函数作为数据使用。作为函数本体,它像普通的数据一样,不一定要有名字。默认名字的函数被称之为匿名函数。如下示例:

function(a){return a;}

匿名函数的两种用法:

  • 可以将匿名函数作为参数传递给其他函数。这样,接收方函数就能利用所传递的函数来完成某些事情。
  • 可以定义某个匿名函数来执行某些一次性任务。
/*
    匿名函数 - 表示没有名称的函数
    * 问题 - JavaScript语法并不支持匿名函数
    * 应用
        * 回调函数 - 将一个函数作为另一个函数的参数使用,作为参数的函数
        * 自调函数 - 函数调用自身(定义即调用的函数)
    */
//直接运行匿名函数时报错
function () {
    console.log('today is a sunny day')
}

1、回调函数

当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数。

(1)不带参数的回调函数
// 函数n作为函数fn的参数->回调函数
var n = function () {
    console.log('n');
}
function fn(v) {
    v();
}
fn(n);

// 匿名回调函数 - 不占用全局命名空间(内存)
fn(function () {console.log('n')})

解析图如下所示:

回调函数

(2)带参数的回调函数
// 函数n作为函数fn的参数->回调函数
var n = function (w) {
    console.log(w);
}
function fn(v) {
    v('function');
}
fn(n);//function


// 匿名回调函数 - 不占用全局命名空间(内存)
fn(function (w) {console.log(w)})//function

解析图如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHMHpMUl-1603723317256)(http://lk.wangshmily.top/PicGo/带参数的回调函数.png)]

2、自调函数

概念:

所谓自调函数就是在定义函数后自行调用。

作用:

用于执行一次性的逻辑任务。

应用:

作为整体逻辑代码外层结构。

语法结构:
  • 第一个括号用来定义函数
  • 第二个括号用来调用函数

如下代码展示了两种写法:

第一种:
// 1、语法结构
//(定义函数)(调用函数)
(function (v) {
    var w = 100;//局部变量
    console.log('this is '+ v);
})('function');
第二种:
// 2、表达式方式
(function (v) {
    var w = 100;//局部变量
    console.log('this is '+ v);
}('function'));

注:自调函数写法不止这两种,此处举例两种比较常用的写法。

拓展:

有个问题:自调函数定义时写上函数名会不会报错?调用会不会报错?

如下代码解释该问题:

//1、定义时加上函数名,输出结果不变,没影响
(function fn() {
    console.log('js')
})()//输出 js

//2、定义时加上函数名,使用函数名调用,输出报错,有影响。
(function fn() {
    console.log('js')
})()
// fn(); 报错,报错信息:ReferenceError: fn is not defined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不苒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值