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

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会定时清理 【堆 】中没有引用的函数

用闭包实现重载的过程学习闭包相关推荐

  1. 【javascript基础】由demo来进阶学习闭包等概念

    Demo 1:闭包初识 先要认识几点现实: 函数外部无法访问函数内部的局部变量. 函数内的嵌套函数可以访问函数的局部变量 将嵌套函数作为闭包返回到外部空间,外部空间通过执行返回的嵌套函数可以实现外部空 ...

  2. 你不懂JS:作用域与闭包 第五章:作用域闭包

    希望我们是带着对作用域工作方式的健全,坚实的理解来到这里的. 我们将我们的注意力转向这个语言中一个重要到不可思议,但是一直难以捉摸的,几乎是神话般的 部分:闭包.如果你至此一直跟随着我们关于词法作用域 ...

  3. Swift-闭包,隐式返回、尾随闭包、值捕获、逃逸闭包、自动闭包

    闭包 闭包可以捕获和存储其所在上下文中任意常量和变量的引用,被称为包裹常量和变量. Swift 会为你管理在捕获过程中涉及到的所有内存操作. 全局和嵌套函数实际上也是特殊的闭包,闭包采用如下三种形式之 ...

  4. 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

    闭包是很多语言都具备的特性,上篇<从抽象代数漫游函数式编程(1):闭包概念再Java/PHP/JS中的定义> 闭包的特性 闭包有三个特性: 函数嵌套函数 函数内部可以引用外部的参数和变量 ...

  5. python反射、闭包、装饰器_python之闭包、装饰器、生成器、反射

    1. 函数的作用域 1.在函数定义时候就固定,与调用位置无关,在调用的时候返回到函数定义的位置 x=1 #全局作用 def f1(): #整个f1函数是定义阶段 deff2():print(x)ret ...

  6. js闭包是什么?对js闭包的理解

    结合 MDN 官网中 JavaScript 章节中对闭包详解,我们需要理清的问题有,什么是闭包.闭包产生的条件.以及闭包的用途. 1.1 闭包的概念 闭包(closure)是一个函数以及其捆绑的周边环 ...

  7. 软件测试的概念与过程----学习软件测试前的思考

    软件测试的概念与过程----学习软件测试前的思考 1.软件测试工作是做什么的? 2.那我做软件测试拿到一个软件产品我应该从哪里测试,怎末开始工作? 3.测试早做好还是晚一些做好? 4.软件测试能将软件 ...

  8. 什么是闭包以及如何使用浏览器查看闭包

    什么是闭包以及如何使用浏览器查看闭包 1. 概念 我们记住两点就可以了 嵌套的内部函数 引用了外部的变量. 原因 因为变量被内部资源占用,而JS的垃圾回收机制不会回收内部函数所占的资源 导致变量一致存 ...

  9. JavaScript学习--闭包

    1.作用域链 JavaScript与很多程序设计语言不同,它不存在大括号级的作用域,但它有函数作用域,也就是说,在函数内定义的变量在函数外是不可见的 2.闭包在Getter和Setter的应用 var ...

最新文章

  1. (C++)求Fibonacci数列的第n个数的两种方法
  2. 【PHP 开发】mac 下配置 PHP 环境的方法
  3. 菜鸟要做架构师(一)——如何快速开发中小型系统
  4. 轻量级的网页Rank算法,365Rss.cn的Rank技术解释以及算法讨论(一)
  5. 微软MSDN中文网络广播(Webcast)——Visual Studio 2010 ALM应用实践系列课程预告(2011)...
  6. JavaScript特点、优缺点及常用框架
  7. ORACLE 各种闪回操作
  8. 不要相信程序员在加班时间写的代码
  9. 语音对话机器人,百行Python代码就能轻松实现
  10. 测试nb信号的软件_NB-IOT测试仪NB测试仪无线网络信号质量检测网络信号故障定位...
  11. sikuli和Robotframework集成若干问题(一):TypeError: exists(): 2nd arg can't be coerced to double
  12. vlan端口隔离配置
  13. 明源云预计年亏超7亿元:被花旗下调评级,“人脸识别”遭质疑
  14. 2021跨年夜表白脱单情话句子 零点跨年夜表白成功文案说说
  15. html分列代码,C#/VB.NET Excel数据分列(示例代码)
  16. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解
  17. Tex, LaTex, pdflatex, xelatex, xetex等的区别和关系
  18. c语言 编程结束怎么表示,c语言开头(c语言编程开头和结束代码)
  19. 使用字节流和字符流向浏览器输出数据
  20. IPV6天窗问题,以及解决方法简述

热门文章

  1. centos6.4下安装python3.6以及对应的django1.11
  2. GoldenGate系统三:trouble shooting and log
  3. Spark创建DataFrame的三种方法
  4. JavaWeb学习总结(十七):JSP中的九个内置对象
  5. 行为型模式:状态模式
  6. NETBEANS_RUBYROR shortcut
  7. Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
  8. at org.apache.coyote.http11.AbstractOutputBuffer.checkLengthBeforeWrite
  9. Map接口与学习系列(一)
  10. win8.1 USB启动盘制作(不支持UEFI,不支持GPT分区)