闭包、this、箭头函数、bind、节流一次就搞懂?这篇文章能回答你所有疑问吗?

26 次浏览次阅读
没有评论

闭包、this、箭头函数、bind、节流一次就搞懂?

在JavaScript开发中,闭包、this指向、箭头函数等概念如同会呼吸的空气——虽然无处不在,但很多开发者直到遇到诡异bug时才意识到它们的运作规律。本文将用最直白的语言拆解这些高频面试考点,通过快递员送货储物柜存取等生活化比喻,带你看透这些”熟悉又陌生”的核心机制。

一、闭包:不会消失的记忆银行

1.1 闭包的本质

记住这句黄金法则:闭包 = 函数 + 它被创建时的词法环境。就像快递员永远记得你的收货地址,函数会永久携带出生时的环境变量。

function createCounter() {
  let count = 0  // 这个变量将被闭包"记住"
  return function() {
    return ++count
  }
}
const counter = createCounter()
console.log(counter()) // 1
console.log(counter()) // 2

1.2 闭包三大陷阱

陷阱1:循环中的闭包黑洞
使用var声明时,所有迭代共享同一个变量:

// 错误示范
for(var i=0; i<3; i++){
  setTimeout(() => console.log(i), 100) // 输出3次3
}
// 正确解法:改用let声明

陷阱2:内存泄漏危机
闭包中的大对象要及时清理:

function processBigData() {
  const bigData = new Array(1000000)
  return () => bigData[0] // 闭包持有整个数组!
}

二、this指向:会变脸的快递员

2.1 四大绑定规则

  • 默认绑定:普通函数调用时,this指向window(严格模式为undefined)
  • 隐式绑定:obj.method() 时,this指向调用对象
  • 显式绑定:call/apply/bind 强制指定this
  • new绑定:构造函数中指向新实例

2.2 箭头函数:没有自己的this

箭头函数如同透明的玻璃窗,永远继承外层this:

const obj = {
  name: 'obj',
  normalFunc: function() {
    console.log(this.name) // 'obj'
  },
  arrowFunc: () => {
    console.log(this.name) // undefined(假设外层是window)
  }
}

三、bind魔法:给函数戴上定位手环

bind方法如同给函数安装GPS定位,永久绑定this:

const module = {
  x: 42,
  getX: function() { return this.x }
}
const unboundGetX = module.getX
console.log(unboundGetX()) // undefined

const boundGetX = unboundGetX.bind(module)
console.log(boundGetX()) // 42

四、节流函数:智能限流的闸门

利用闭包实现高频事件控制:

function throttle(fn, delay) {
  let lastCall = 0
  return function(...args) {
    const now = Date.now()
    if(now lastCall < delay) return
    lastCall = now
    fn.apply(this, args)
  }
}

// 使用示例
window.addEventListener('resize', throttle(() => {
  console.log('处理resize事件')
}, 200))

五、综合应用:React事件绑定解密

在React类组件中,三种典型的事件处理方式:

class MyComponent extends React.Component {
  // 方式1:bind绑定
  constructor() {
    super()
    this.handleClick = this.handleClick.bind(this)
  }
  
  // 方式2:箭头函数
  handleClick = () => {
    console.log(this.state)
  }
  
  // 方式3:内联箭头函数
  render() {
    return 

掌握这些核心概念后,你将能:

  • 准确预测代码中的this指向
  • 避免常见的内存泄漏陷阱
  • 手写bind、节流等工具函数
  • 深入理解框架底层机制

下次遇到闭包相关bug时,记得在Chrome DevTools的Scope面板查看闭包变量。通过刻意练习这些概念,你将在代码海洋中游刃有余,真正实现从”会用”到”懂原理”的蜕变。

正文完
 0

辉哥

一言一句话
-「
最新文章
Shopee个人能不能开店?虾皮个人卖家可行吗?

Shopee个人能不能开店?虾皮个人卖家可行吗?

Shopee个人能不能开店?虾皮个人卖家可行吗?2025-2026最新解答 在跨境电商领域,Shopee(虾皮...
Shopee卖家如何上传商品?Shopee店铺真的难出单吗?

Shopee卖家如何上传商品?Shopee店铺真的难出单吗?

Shopee卖家如何上传商品?Shopee店铺真的难出单吗? Shopee作为东南亚及拉美地区领先的电商平台,...
1688严选怎么联系人工客服?官方客服电话是多少?

1688严选怎么联系人工客服?官方客服电话是多少?

1688严选怎么联系人工客服?官方客服电话是多少? 在1688平台上,严选频道以源头厂货、品牌平替和高性价比商...
2026年淘宝补单有哪些方法?补单周期通常多久?

2026年淘宝补单有哪些方法?补单周期通常多久?

2026年淘宝补单有哪些方法?补单周期通常多久? 2026年,淘宝平台流量竞争更加激烈,新店冷启动难度持续加大...
2026年淘宝现在还能补单吗?一般补几天能起流量?

2026年淘宝现在还能补单吗?一般补几天能起流量?

2026年淘宝现在还能补单吗?一般补几天能起流量? 在2026年的淘宝电商环境中,许多新手和老商家都在关注一个...
Shopee卖家如何发货?一件代发流程怎么操作?

Shopee卖家如何发货?一件代发流程怎么操作?

Shopee卖家如何发货?一件代发流程怎么操作? 作为Shopee跨境电商的新手卖家,最让人头疼的问题往往不是...
2026年5月淘宝有哪些活动?当月大促安排是什么?

2026年5月淘宝有哪些活动?当月大促安排是什么?

2026年5月淘宝有哪些活动?当月大促安排是什么? 2026年5月,淘宝将继续保持高频促销节奏,既承接五一假期...
1688开店要收费吗?1688店铺有哪些费用?

1688开店要收费吗?1688店铺有哪些费用?

1688开店要收费吗?1688店铺有哪些费用? 在当下电商批发市场中,1688作为阿里巴巴旗下的核心采购平台,...
TikTok开店需要满足什么条件?店铺审核严吗?

TikTok开店需要满足什么条件?店铺审核严吗?

TikTok开店需要满足什么条件?店铺审核严吗? 随着TikTok用户规模持续爆发,越来越多商家把目光投向Ti...
TikTok直播入口在哪?官方下载安装渠道是什么?

TikTok直播入口在哪?官方下载安装渠道是什么?

TikTok直播入口在哪?官方下载安装渠道是什么?2026最新全攻略 TikTok已经成为全球最火的短视频平台...
TikTok直播可以提现吗?跨境直播怎么结算?

TikTok直播可以提现吗?跨境直播怎么结算?

TikTok直播可以提现吗?跨境直播怎么结算? 随着TikTok在全球的火爆,越来越多的人通过直播赚取收入。很...