重载
相同函数名,不同参数列表的多个函数,在调用时可自动根据传入参数的不同,选择对应的函数执行。
为什么使用重载:
                   减轻API的名字,减轻调用者的负担。
何时使用重载: 
                  只要一项任务,可能根据不同的参数执行不同的逻辑。就可以使用重载。

问题:

JS语法默认不支持重载,JS中不允许多个函数同名,后一个函数会覆盖前一个函数;
    解决办法:多个函数合并为一个函数,并且省略参数。
    参数变量依然必要:
                     1.参数变量可指导调用者正确的使用函数
                      2.参数名都是有意义的,便于维护,

匿名函数
            定义函数时,不指定函数名的函数,可以节约内存。只要函数只使用一次时,都需要使用匿名函数。
有两种情况:
            1.回调函数arr.sort(function(a,b){return a-b})将一个函数作为参数传给另一个函数中调用
               比如:addEventListener('click',function(){}),定时器,str.replace(reg,function(){})等等
               如果函数可能被反复调用的话,或者多个元素共享时,就应该用有名的函数。
           2.匿名函数自调:
                   定义一个函数后,立即调用该函数,调用后立即释放。
                  何时使用:划分临时作用域,避免全局变量污染。

作用域和作用域链

作用域:变量的可用范围

作用域包括两种:

         1.全局作用域window
                全局变量:优点:可重复使用,随处可用
                              缺点:极易造成全局污染
        2.函数作用域对象AO
               局部变量:优点:仅仅函数内部使用,不会造成全局污染
                              缺点:不可重用;
    作用域链:
             由各级作用域对象连续引用,形成的链式结构。
     函数的声明周期:
         1.程序开始执行前,程序会创建全局对象

2.定义函数时
                   在window中创建函数名变量引用函数对象,函数对象的隐藏属性scope指向函数来自的祖籍作用域对象。

3.调用函数时
                  创建本次函数调用时使用的AO对象,在AO对象中添加函数的局部变量,设置AO的隐藏属性parent指向函数的祖籍作用域对象---执行时,如果AO中没有可用的变量,可向祖籍作用域对象找
        4.调用函数后
                 函数作用域对象AO释放,导致AO中局部变量释放。
作用域的作用:
              1.保存了所有的变量
              2.控制了变量的使用顺序:先用局部,局部没有才会一级一级向上查找。

闭包
        重用变量,又保护变量不被污染的一种结构。
何时使用变量:

只要希望重用一个变量,并保护变量不被污染,可以使用闭包。
如何使用:
                1.使用外层函数包裹受保护的变量和操作变量的内层函数;
                2.外层函数将内层函数返回到外部
               3调用者用外部变量

闭包形成:
             外层函数的函数作用域对象无法释放
问题:闭包结构比普通函数占用过多的内存,
如何解决:
            释放闭包:将引用内层函数的外部变量设为null;

请看下面的例子:

输出:

变量t也没有释放,一直在全局环境中,需要设为null。上面的代码等同于:

输出:

Function相关的小知识的更多相关文章

  1. lua相关的小知识

    lua的特性 1. 轻量级:一标准的C语言编写原发开放,编译后仅仅100K,占用内存小: 2. 扩展性:Lua提供了非常已于使用的扩展口和机制: 3. 支持面向过程编程和函数式编程 lua的数据类型 ...

  2. 测量行业(RTK)相关的小知识总结

    RTK测量系统,一般需要先架设基准站(参考站),数据链模式外挂大电台(有天线大功率模式,理想范围方圆18公里以内).基准站通过收到卫星(多星)进行计算出当前的位置. 其中涉及到频率的设置,波特率,以及 ...

  3. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  4. s性能优化方面的小知识

    总结的js性能优化方面的小知识 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够 ...

  5. uniGUI for C++ builder之杂七杂八小知识

    uniGUI for C++ builder之杂七杂八小知识 2018年09月30日 22:16:05 中国银行之路在脚下 阅读数:41 标签: uniguibuilder 更多 个人分类: C++ ...

  6. 自定义博客cnblogs样式的必备前端小知识——js、jq

    JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...

  7. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  8. 12个你未必知道的CSS小知识

    虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...

  9. WinForms C#:html编辑器工程源码,含直接写WebBrowser的文件流、IPersistStreamInit接口的声明和一些相关的小方法

    原文:WinForms C#:html编辑器工程源码,含直接写WebBrowser的文件流.IPersistStreamInit接口的声明和一些相关的小方法 首先多谢朋友们的捧场: 今天给大家带来一个 ...

随机推荐

  1. tp5.1 swoole 实现异步处理

    客户端请求:<?phpnamespace app\index\controller; class Index{ public function index() { $client = new \ ...

  2. vbox虚拟机复制&&虚拟机指定静态IP

    一.复制镜像(假设源镜像已经用桥接方式,可以访问互联网). 注意需要重新生成mac地址 二.复制完成,启动复制好的镜像(注意,此时的镜像无法联网) vi /etc/udev/rules.d/70-pe ...

  3. SQLSERVER 数据库管理员的专用连接DAC

    DAC:Dedicated Admin Connection 当SQL Server因系统资源不足,或其它异常导致无法建立数据库连接时, 可以使用系统预留的DAC连接到数据库,进行一些问题诊断和故障排 ...

  4. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  5. vue+element-ui 使用富文本编辑器

    npm安装编辑器组件npm install vue-quill-editor –save 在components文件夹创建ue.vue组件,如下 ue.vue代码如下: <!-- 组件代码如下 ...

  6. [转] 允许远程用户登录访问mysql的方法

    需要手动增加可以远程访问数据库的用户. 方法一.本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项 ...

  7. Spring Cloud Eureka集群配置及注意事项(Greenwich版本)

    Spring Cloud Eureka集群配置及注意事项(Greenwich版本) 一·概述 Spring Cloud Netflix Eureka 是一个提供服务注册与发现的套件.服务提供者只需要将 ...

  8. [NOI OJ]6044:鸣人和佐助

    6044:鸣人和佐助 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示) ...

  9. bzoj 1050 [HAOI2006]旅行comf——kruscal

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1050 因为还有Impossible的情况,所以想到了kruscal.(?) 但好像不太行.然 ...

  10. MAC中已有的虚拟环境在pycharm 中进行调用

    首先确定虚拟环境的路径: 打开工作环境配置文件,找到工作目录: 在pycharm中解释器中找到工作目录中对应的虚拟环境进行配置就可以了