JavaScript高阶函数

本文深入探讨了JavaScript中的高阶函数概念,包括函数作为参数和返回值的应用,并详细解析了闭包的作用与实现,通过实例说明闭包如何连接函数内外部作用域,保持变量状态。

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

1高阶函数
- 函数可以作为参数
- 函数可以作为返回值
1.1 作为参数
function eat (callback) {
  setTimeout(function () {
    console.log('吃完了')
    callback()
  }, 1000)
}
eat(function () {
  console.log('去唱歌')
})
1.2 作为返回值
function genFun (type) {
  return function (obj) {
    return Object.prototype.toString.call(obj) === type
  }
}
var isArray = genFun('[object Array]')
var isObject = genFun('[object Object]')
console.log(isArray([])) // => true
console.log(isArray({})) // => true
1.3 函数闭包
function fn () {
  var count = 0
  return {
    getCount: function () {
      console.log(count)
    },
    setCount: function () {
      count++
    }
  }
}
var fns = fn()
fns.getCount() // => 0
fns.setCount()
fns.getCount() // => 1
2 作用域、作用域链、预解析
全局作用域
函数作用域
没有块级作用域
{
  var foo = 'bar'
}
console.log(foo)
if (true) {
  var a = 123
}
console.log(a)
作用域链示例代码:
var a = 10
function fn () {
  var b = 20
  function fn1 () {
    var c = 30
    console.log(a + b + c)
  }
  function fn2 () {
    var d = 40
    console.log(c + d)
  }
  fn1()
  fn2()
}
内层作用域可以访问外层作用域,反之不行
3 什么是闭包
闭包就是能够读取其他函数内部变量的函数,
由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,
因此可以把闭包简单理解成 “定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包的用途:
可以在函数外部读取函数内部成员
让函数内成员始终存活在内存中
4 一些关于闭包的例子
示例1:
var arr = [10, 20, 30]
for(var i = 0; i < arr.length; i++) {
  arr[i] = function () {
    console.log(i)
  }
}
示例2:
console.log(111)

for(var i = 0; i < 3; i++) {
  setTimeout(function () {
    console.log(i)
  }, 0)
}
console.log(222)
示例3:投票
示例4:判断类型
示例5:沙箱模式
5 闭包的思考题
思考题 1:
var name = "The Window";
var object = {
  name: "My Object",
  getNameFunc: function () {
    return function () {
      return this.name;
    };
  }
};
console.log(object.getNameFunc()())
思考题 2:
var name = "The Window";  
var object = {    
  name: "My Object",
  getNameFunc: function () {
    var that = this;
    return function () {
      return that.name;
    };
  }
};
console.log(object.getNameFunc()())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值