高阶函数和闭包

本文深入探讨了高阶函数的概念,展示了如何通过参数传递函数实现回调功能,以及闭包在JavaScript中的应用,包括其如何延长变量作用域,解决定时器和事件监听中的变量访问问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高阶函数

高阶函数是对其它函数进行操作的函数,它接收函数作为参数或者将函数作为返回值输出

/函数可以作为参数传递
function fn(a,b,callback) {
         console.log(a+b);
         callback&&callback();
         }
         fn(1,2,funnction(){
              console.log('楠楠nb‘);
              });

此时的fn就是一个高阶函数。函数也是一种数据类型,同样可以作为参数,传递给另外一个函数使用,例如回调函数。

闭包

变量的作用域
  • 函数内部可以使用全局变量
  • 函数外部不可以使用局部变量
  • 当函数执行完毕之后,本作用域里的局部变量会被销毁
闭包

闭包是指有权访问另一个函数的作用域中变量的函数。就是说,一个作业域可以访问另外一个函数内部的局部变量。
实质是延申了变量的作用范围

closure//一个作用域可以访问另外一个函数的局部变量
funnction fn(){
     var sum = 10;
     function fun() {
         console.log(num);//10
         }
         fun();
    }
    fn();



//fn外面的作用域可以访问fn内部的局部变量
funnction fn(){
     var sum = 10;
     function fun() {
         console.log(num);//10
         }
         return fun;
    }
    var f = fn();
    f();

fn一调用就会执行fn这个函数,相当于执行
var f =function fun() {
console.log(num);//10
}

看一个案例点击li输出序号值

<class id="nav">
<li>香蕉牛奶</li>
<li>番茄炒蛋</li>
<li>卡布奇诺</li>
//1.利用动态添加属性的方法
var lis=document.querrySelector('.nav').querrSelectorAll('li');
for (var i=0; i<lis.length;i++){
lis[i].index=i;
lis[i].onclick=functiion(){
    console.log(this.index);
    }
}
//2.利用闭包的方式来获得li的索引号
for(var i=0;i<lis.length;i++){
  //利用for循环创建三个立即执行的函数
  //立即执行函数也成为一个小闭包因为立即执行函数里面的任何一个函数都可以使用i这个变量
    (function(i){
       lis[i].onclick=function(){
       console.log(i);
       }
 })(i);
 }

但是这个的闭包效率低,并且i占内存。会造成内存泄漏。
(什么是内存泄露:
内存泄漏就是申请了空间却没有成功释放,或者是申请了空间,却丢失了指向该空间的指针,造成内存无法操控,

危害:
内存泄漏会导致系统变慢,卡顿,甚至卡死。
长期运行的程序出现内存泄漏,影响,如操作系统,后台服务等,影响很大。)

//三秒后打印所有li元素的内容
var lis = document.querrySelector('.nav').querySelectorAll('li');
for(var i=0; i<lis.length;i++){
    function(i){
          setTimeout(function){
              console.log(lis[i].innerHTML);
          },3000)
     })(i);
   }

闭包是定时器里面的这个函数,用到了另外一个立即执行函数里面的i变量,也是一个函数使用另外一个函数的变量。即在立即执行函数里面的函数都可以使用立即执行函数的i变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值