JavaScript高阶函数与闭包

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

高阶函数形式1:接收函数作为参数

function fn(callback){ 
  callback&&callback(); 
} 
fn(function(){alert('hi')}

高阶函数形式2:接收函数作为参数

function fn(){ 
    return function() {} 
} 
fn();

上面的两个fn 都是一个高阶函数,只要满足接收函数作为参数将函数作为返回值输出的一个条件就叫做高阶函数。

函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。 最典型的就是作为回调函数。
同理函数也可以作为返回值传递回来

闭包

闭包简单理解就是,在一个作用域中可以访问另外一个函数内部的局部变量,这个局部变量所在的函数就叫做闭包。
闭包作用:
1:延伸变量的作用范围。 (闭包函数执行完之后局部变量不会马上销毁,会等到调用这个变量的函数都执行完毕才销毁)
2:隐藏变量/封装变量
缺点:太多局部变量占用内存而不销毁可能会造成内存溢出。
返回一个函数是闭包实现的主要原理。

 function fn1(){    // fn1 就是闭包函数
 	var num = 10;
 	function fn2(){ 
 		console.log(num); // 10
 	}
 	fn2()
 }
 fn1(); 

或者下面这种形式

 function fn() {
 	var num = 10;
 	return function {
 		console.log(num); // 10 
 	} 
  } 
  var f = fn(); 
  f() 

在 chrome 调试工具进行断点调试时,右边 Scope 选项(Scope 作用域的意思)里面会有两个参数(global 全局作用域、local 局部作用域)。 当执行到 fn2( )/fn( ) 时,Scope 里面会多一个 Closure 参数 ,这就表明产生了闭包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值