高阶函数,闭包,递归

9 篇文章 0 订阅

高阶函数

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

<script>
// 接收函数作为参数
function fn(callback) {
    callback && callback()
}
fn(function() {alert(‘hi’)})
</script>
<script>
 function fn() {
 // 将函数作为返回值输出
     return function() {}
}
fn()
</script>

此时fn就是一个高阶函数

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

闭包

闭包(closure)有权访问另一个函数作用域中变量函数------JavaScript高级程序设计

变量作用域
变量根据作用域的不同分为两种:全局变量和局部变量
1函数内部可以使用全局变量
2函数外部不可以使用全局变量
3当函数执行完毕,本作用域内的局部变量会销毁

简单理解就是,一个作用域可以访问另外一个函数内部的局部变量

// 闭包:fun这个函数作用域 访问了另一个函数 fn 里面的局部变量 num 这就是产生了闭包,fn是闭包
function fn() {
   var num = 10 
function fun() {
  console.log(num) // 10
 }
fun()
}
fn()

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

在这里插入图片描述

闭包的主要作用

闭包的主要作用:延申了变量的作用域范围

闭包小案例

点击li输出当前li的索引

<ul class=”nav”>
  <li>榴莲</li>
  <li>臭豆腐</li>
 <li>鲱鱼罐头</li>
 <li>大猪蹄子</li>
</ul>
// 获取ul 和 li
var lis = document.querySelector(.nav’).querySelectorAll(‘li’)
for(var i = 0; i < lis.length; i++) {
 // 利用for循环创建了4个立即执行函数
// 立即执行函数也称为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这个变量
(function(i) {
  // lis[i].onclick = function() {
console.log(i)
}
)(i)
}

递归

递归:如果一个函数内部可以调用其本身,那么这个函数就是递归函数
简单理解:函数内部自己调用自己,这个函数就是递归函数
由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件return(递归函数的作用和循环效果一样,要加退出条件return结束)

利用递归函数求1~n的阶乘

function fn(n) {
If(n == 1) {
   Return 1;
}
return n * fn(n - 1)
}
console.log(fn(3))

详细思路 假如用户输入的是3

// 3 * fn(3-1) 3fn(2)
// 3
(2fn(1))
// 3
(21) 32=6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值