用闭包实现重载的过程学习闭包

用闭包实现重载的过程学习闭包

let global = {
    overLoad:function(){}
};
function Refactoring(func) {
  let oldFunc = global.overLoad; 
  global.overLoad = function () { 
    if (func.length === arguments.length) {//js函数length属性表示有多少个参数
      return func.apply(this, arguments);//arguments:调用global.overLoad函数的参数
    } else if (typeof oldFunc === "function") {
      return oldFunc.apply(this, arguments);//global调用的overLoad函数,所以this指向global
    }
  }
}
Refactoring((name) => console.log(`${name}`))
Refactoring((name, age) => console.log(`${name},${age}`))
Refactoring((name, age, province) => console.log(`${name},${age}岁,${province}`))
global.overLoad('Kecvin') // Kecvin
global.overLoad('Kecvin', 28) // Kecvin,28岁
global.overLoad('Kecvin', 28, '安徽') // Kecvin,28岁,安徽人
  • 什么叫函数的重载

根据参数(arguments)数量的不同,返回不同的结果

  • 以上哪里用到了闭包?

关于闭包,网上有很多定义,建议看阮一峰老师这篇,虽然有点久远,但并不过时

学习JavaScript闭包

其实不必咬文嚼字,我一直认为对于闭包最通俗易懂的解释就是下面的一句话

闭包是个函数,而它「记住了周围发生了什么」,我们可以通过它,拿到它周围的东西

换言之,闭包就是将函数内部和函数外部连接起来的一座桥梁

  • 闭包在什么时候销毁 ?

js中内存分为【栈 】和 【堆】,闭包函数主体存储在【堆】中,它的引用存储在 【栈】 中,js会定时清理 【堆 】中没有引用的函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值