资讯专栏INFORMATION COLUMN

体验javascript之美第五课 五分钟彻底明白 匿名函数自执行和闭包

HitenDev / 376人阅读

摘要:注意匿名函数自执行只是产生闭包的一种情况,闭包是现象或者情形,不实用匿名函数自执行也有很多情况产生闭包,所以而且根本就是两回事儿,不能混淆。小测验,你能看出下面的程序用了闭包吗闭包在中使用。闭包无处不在,直接看的例子。

通过文你将学到:

1.闭包是怎么回事儿?

2.闭包的原理和在jquery中的应用

3.从一到面试题彻底理解闭包和垃圾回收机制

4.闭包在jquery中的应用

概述

经常听到闭包这个词儿,或者匿名函数自执行,之类的。到底他们是一个东西吗?

1.什么是闭包?

​ 我不想扣定义,直接上例子。

function parent(firstname){
  return function(lastname){
  console.log(firstname+"·屌·"+lastname);
  }
}
parent("尼古拉斯")("大彬哥");

看图:

函数执行完以后会销毁(这里我就不谈堆栈操作了理解图就行了),然后各种变量会垃圾回收,而这里parent函数确实销毁了,但是firstName这个参数并没有垃圾回收,释放内存,依然在内存中能够被return里面的函数使用,好像return里面的函数把 父函数的那个资源给关闭在了自己的函数里面一样,这个函数销毁资源被关闭到子函数中依然能够使用的现象叫做闭包。

注意匿名函数自执行只是产生闭包的一种情况,闭包是现象或者情形,不实用匿名函数自执行也有很多情况产生闭包,所以而且根本就是两回事儿,不能混淆。

类比,在window系统中,你子文件夹中有使用的文件父文件夹是没法删除的。

2.实际应用,情况很多,先来一道面试题。
        function fn{
            var arr = [];
            for(var i = 0;i<3;i++){
                arr.push(function(){
                    console.log(i);
                });
            }
            return arr;
        }
        var arrFn = fn();
        arrFn[0]();//3
        arrFn[1]();//3
        arrFn[2]();//3

与这个类似的一个题是循环里面用事件,事件里面的i有问题,如下。

for(var i = 0;i

还有一到非常爱考的面试题,

for(var i = 0;i<3;i++){
      setTimeout(function(){
          alert(i);
      });
}

我只分析一个,其它的大家就会分析了。注意表象上粗略的理解就是 函数执行一瞬间,并不会等定时器,但是这个说法并不对,因为第一个就说不通。好我给记大家进入内部深入分析下过程。

记住一句话,函数定义压入arr的时候并没有执行。

小测验,你能看出下面的程序用了闭包吗?

function show(){
      var a = 12;
      setTimeout(function(){
          console.log(a);
      },1000);
}

3.闭包在jquery中使用。

闭包无处不在,直接看jquery的例子。

$("#btn").click(function(){
      var json = {};
      ajax(url,function(data){
          json =dada;
      });
      
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82595.html

相关文章

  • 体验javascript之美- 匿名函数执行闭包是一回事儿吗?

    摘要:大家想想怎么做什么是匿名函数自执行并如何在实际库中应用匿名函数自执行,注意,注意,只有这个名字和没有其它名字,比如封闭空间,这个是为了让大家好理解自己造的词语。 通过本节课你将学到: 1.什么是函数表达式和函数声明 2.first-class function 3.引用和复制的区别 4.函数传参是怎么回事儿 5.关于函数的this和arguments 6.什么是匿名函数自执行并如何在...

    _Suqin 评论0 收藏0
  • 体验javascript之美第四课--函数函数表达式、闭包

    摘要:大彬哥版权所有翻录必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函数声明函数表达式是不是简单的让人发指区别就一句话,函数声明,可以在函数调用之后,因为有函数预解析。而函数表达式必须在调用之前。 通过前三课讲解,大家应该能做到 1.手里有一份随时能够换工作自信的简历 2.知道了学习js的正确姿势 3.理解了全局对象、全局上下文、知道有预解析同时做了至少50道面试题 4.能熟练的使用json构建...

    Doyle 评论0 收藏0
  • JavasScript重难点知识

    摘要:忍者级别的函数操作对于什么是匿名函数,这里就不做过多介绍了。我们需要知道的是,对于而言,匿名函数是一个很重要且具有逻辑性的特性。通常,匿名函数的使用情况是创建一个供以后使用的函数。 JS 中的递归 递归, 递归基础, 斐波那契数列, 使用递归方式深拷贝, 自定义事件添加 这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果...

    forsigner 评论0 收藏0
  • javascript -- 回调函数之美

    javascript -- 回调函数 在高级语言层出不穷的年代, 各个语言都号称有着一切皆为对象的自豪说法, 而 js 作为一门脚本语言却相对于java等传统面向对象语言有很大的不同之处, 除了 js 诡异的继承体系之外, 最令人着迷的一个特性就是回调函数, 当然也有很多人对他诟病, 笔者认为 回调函数 和 异步 是js语言特性的两大最为突出的店, 当然正如所有优点需要满足自我的需求, 这个世界...

    kbyyd24 评论0 收藏0

发表评论

0条评论

HitenDev

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<