闭包

本文深入探讨JavaScript中的闭包,解析如何产生闭包、this的五大调用场景及其特点,以及闭包在封装私有属性、回调函数、函数节流防抖等方面的应用。同时,分析了闭包的优缺点,提醒开发者合理使用以避免性能问题。
摘要由CSDN通过智能技术生成

闭包

1. 如何产生闭包(closure)

在这里插入图片描述
在这里插入图片描述

上图代码:

// 函数作为返回值
function create() {
   
    const a = 100
    return function () {
   
        console.log(a)
    }
}

const fn = create()
const a = 200
fn() // 100

// 函数作为参数被传递
function print(fn) {
   
    const a = 200
    fn()
}
const a = 100
function fn() {
   
    console.log(a)
}
print(fn) // 100

所有的自由变量的查找,是在函数定义的地方,向上级作用域查找
不是在执行的地方!!!

2. this

5大调用场景:
普通函数、
对象方法、
call apply bind
class
箭头函数
注意:
this取什么值,是在执行时确认的,定义时无法确认

在这里插入图片描述

全局下,普通函数fn1执行,相当于window执行了fn1函数,所以this是window
call apply bind可以修改this,

  function fn1(this={
   x:100}){
   
		fn1,call({
   x:100}) ==>  console.log(this)
  }
  
bind也可以修改,但是多了一步执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值