js高级--闭包

js中函数是一等公民(使用灵活,可以作为另一个函数的参数,返回值)

函数作为参数的使用

function cale(num1,num2,calcFn){
  console.log(calcFn(num1,num2))
}
function add(num1,num2){
  return num1+num2
}
function sub(num1,num2){
  return num1-num2
}
function mul(num1,num2){
  return num1*num2
}
var m = 20
var n = 30
cale(m,n,sub)

函数作为返回值的使用

function foo(){
  var name = "foo"
  console.log(age)
  function bar(){
    var age = 10
    console.log("bar",name)
  }
  // return bar() //这样写是执行bar函数,再将结果返回
  return bar //直接返回bar函数
}
var fn = foo() //此时的fn就是bar
fn() //这里执行的就是bar函数

数组中的函数使用

高阶函数

高阶函数:一个函数如果接受另一个函数作为参数,或者该参数会返回另外一个函数作为参数的函数,那么这个函数就是一个高阶函数。

forEach迭代
nums.forEach(function(item){
    console.log(item)
})
find 查找一个准确的值
var item = nums.find(function(item){
    return item == 11
})
filter(筛选元素)
filter中的回调函数有一个要求:必须返回一个Boolean值
    true:当返回true时,函数内部会自动将这次回调的n加入到新的数组中
    false:当返回false时,函数内部会过滤掉这次的n
语法:
    nums.filter(function(item,index,array) {
    return (item > 1)
    })
item 必选 当前元素的值,是nums中的一项
index 可选 当前元素的索引值,index是每项下标
array 可选 当前元素属于的数组对象,array就是nums

let newNums = nums.filter(function(n){
    return n<100
})
console.log(newNums)
map(遍历/运算元素/元素转换类型)
let new2Nums = newNums.map(function(n){
    return n*2
})
console.log(new2Nums)
reduce(计算元素)
reduce作用是对数组中所有的内容进行汇总
语法:
    new2Nums.reduce((参数一,参数二)
    let total = new3Nums.reduce(function(prevalue,n){
    return preValue + n
    },0) //此处的0是为prevalue 赋初始值
    console.log(total)
第一次: preValue 0    n 20
第二次: preValue 20   n 40
第三次: preValue 60   n 80
地四次: preValue 140 n 100
三个函数结合求总
let total = nums.fiflter(function(n){
    return n<100
}).map(function(n){
    return n*2
}).reduce(function(preValue,n){
    return preValue + n
},0)
console.log(total)
三个函数用箭头函数结合求总
const nums = [10,20,111,222,444,40,50]
let total = nums.filter(n => n < 100).map(n => n*2).reduce((pre,n) => pre +n)

js中闭包的定义

在计算机科学中对闭包的定义(维基百科)
  • 闭包(closure),又称词法闭包或函数闭包
  • 是在支持头等函数的编程语言中,实现词法绑定的一种技术。
  • 闭包在实现上是一个结构体,他存储一个函数和一个关联的环境(相当于一个符号查找表)
  • 闭包跟函数最大的区别在于,当捕捉闭包的时候,它的自由变量会在捕捉时被确定,这样即时脱离了捕捉时的上下文,他也照常运行
MDN对JavaScript闭包的解释
  • 一个函数和对其周围状态的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包
  • 也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。
  • 在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
coderwhy老师总结:
  • 一个普通的函数function,如果它可以访问外层作用域的自由变量,那么这个函数就是一个闭包
  • 从广义的角度来说:JavaScript中的函数都是闭包。
  • 从狭义的角度来说:JavaScript中一个函数,如果访问了外层作用域的变量,那么他就是一个闭包。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值