闭包的定义及作用

闭包的定义及作用1 闭包的定义 闭包就是能够读取其他函数内部变量的函数 在 js 中 可以将闭包理解成 函数中的函数 nbsp nbsp nbsp 如下代码中 f2 函数就是闭包 functionf1 varm 10 functionf2 alert m 10 2 闭包的作用 nbsp nbsp nbsp A 可以读取函数内部的变量 nbsp nbsp nbsp B 让这些变量的值始终保存

1、闭包的定义:闭包就是能够读取其他函数内部变量的函数。在js中,可以将闭包理解成“函数中的函数“。

     如下代码中f2()函数就是闭包:

 function f1(){     var m = 10;     function f2(){       alert(m); // 10     } }

2
闭包的作用:

     A、可以读取函数内部的变量

     B、让这些变量的值始终保存在内存中。这是因为闭包的执行依赖外部函数中的比那辆,只有闭包执行完,才会释放变量所占的内存

3、使用闭包的注意事项

   (1)  问题:由于闭包会使得函数中的变量都被保存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会造成内存泄露。

              解决方法:在退出函数之前,将不使用的局部变量全部删掉

   (2)  问题:闭包会在父函数外部,改变父函数内部变量的值。

              如果把父函数当做对象使用,把闭包当做公用方法,把内部变量当做私有属性,此时不要随便改变父函数内部变量的值。

             如下面的例子:

 //----代码一  var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){ //js中,函数就是作用域         return this.name; // 闭包 + this,造成的问题,函数中的this不能访问到作用域外的变量       };     }   };   alert(object.getNameFunc()()); //this的作用域是在函数执行的时候确定,因为匿名函数是一个全局变量,因此this指向的是window对象 // 因此输出结果是:The Window //-----代码二   var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       var that = this; //--this指向object,保留了对象object在that里面,       return function(){         return that.name; //这里输出对象object的name属性的值       };     }   }; alert(object.getNameFunc()()); // 所以暑促值:My Object

    一道闭包的面试题

function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n); } }; } var a = fun(0); a.fun(1); a.fun(2); a.fun(3); var b = fun(0).fun(1).fun(2).fun(3); var c = fun(0).fun(1); c.fun(2); c.fun(3); //问:三行a,b,c的输出分别是什么? var a = fun(0); a.fun(1); a.fun(2); a.fun(3); //undefined 0 0 0 var b = fun(0).fun(1).fun(2).fun(3); //undefined 0 1 2 var c = fun(0).fun(1); c.fun(2); c.fun(3); //undefined 0 1 1

看下面这段代码,调用fun后,会返回一个空对象

function fun(n,o){ return { } }
 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n); } }; } var a = fun(0);

注意:当调用函数的时候,传入的实参比函数声明时指定的形参个数少时,剩下的形参都被设定为undefined

上面调用函数var a=fun(0);  输出的结果如下:

console.log(o);   //undefined

a的值是调用fun(0)后返回的对象,即a的值如下:

{ fun:function(m){ return fun(m,0); } }

理解了这里,上面的题目就可以做出来了。

详细解答,参考链接:详细解答


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232600.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关闭防火墙 linux_linux系统防火墙关闭

    关闭防火墙 linux_linux系统防火墙关闭抛开实际生产环境个人平时练习的时候安装虚拟机可能遇到过很多坑就很烦,可能很大一部分原因都是防火墙没关掉哈哈哈哈所以建议永久性关闭防火墙下面是CentOs7关闭防火墙的命令!1:查看防火状态systemctlstatusfirewalld如果是这样就开着呢如果是这样就是关着2:暂时关闭防火墙systemctlstopfirewalld3:重启防火墙systemctlenablefirewalld5:永久关闭后重启Linux永久关闭防火墙firewalld和selli

    2025年9月20日
    7
  • pycharm连接mysql数据库代码_myeclipse连接数据库

    pycharm连接mysql数据库代码_myeclipse连接数据库PyCharm是一款常用的Python开发的软件,这里给大家介绍一下如何在PyCharm如何连接MySQL数据库。首先,我们需要找到页面中的DataBase窗口,一般在页面的右侧,没有显示的话,可以点击View->ToolWindows->DataBase。然后显示DataBase之后,我们点击DataBase。然后我们点击DataBase的这个+号。然后选择DataSource->MySQL。然后就显示到连接的页面,如果是第一次连接的时候,就需要点击下面的D

    2022年8月27日
    4
  • 完整全面的Java资源库—–转载[通俗易懂]

    完整全面的Java资源库—–转载[通俗易懂]构建这里搜集了用来构建应用程序的工具。ApacheMaven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于ApacheAnt。后者采用了一种过程化的方式进行配置,所以维护起来相当困难。Gradle:Gradle采用增量构建。Gradle通过Groovy编程而不是传统的XML声明进行配置。Gradle可以很好地配合Maven…

    2022年7月8日
    32
  • java递归算法详解_Java递归算法详解(动力节点整理)

    java递归算法详解_Java递归算法详解(动力节点整理)递归算法是一种直接或者间接调用自身函数或者方法的算法 Java 递归算法是基于 Java 语言实现的递归算法 递归算法的实质是把问题分解成规模缩小的同类问题的子问题 然后递归调用方法来表示问题的解 递归算法对解决一大类问题很有效 它可以使算法简洁和易于理解 递归算法解决问题的特点 1 递归就是方法里调用自身 2 在使用递增归策略时 必须有一个明确的递归结束条件 称为递归出口 3 递归算法解题通常显得很

    2025年6月11日
    4
  • 实现ipv4和ipv6转换

    #include#include#ifdef_WIN32#define_WINSOCK_DEPRECATED_NO_WARNINGS#include<WS2tcpip.h>#else#include<arpa/inet.h>#endifintinet4_pton(constchar*cp,uint32_t&ap){uint32_tacc=0;uint32_tdots=0;uint32_taddr=0;uin

    2022年4月7日
    36
  • 车载以太网之 DHCP协议「建议收藏」

    车载以太网之 DHCP协议「建议收藏」车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。车载以太网涉包含的各种协议DHCP的全称是DynamicHostConfigurationProtocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置I

    2022年5月23日
    122

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号