特殊函数
匿名函数
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