zoukankan      html  css  js  c++  java
  • 前端面试之闭包理解

    讲之前我想说说我面试的经验,懒散了许久的我,在第一次面试必须被pass掉了。但是通过这次面试我也进行了深刻的反省。虽然说有将近两年开发经验的我,但是真的只懂得些皮毛,至于它底层的原理是怎么实现的,说不出个所以然了,面试了一家,那个面试官超nice,还给了我很多好的建议,我也默默的想做出相应的改变,比如真的需要多夯实基础,很多公司比较重视基础,而不是说你懂了有哪些框架,好了,不在这里噼里啪啦的乱讲一通了,后期有空会把面试遇到的面试题跟大家分享哦,敬请期待!哈哈哈。。。。

    好咯,现在来说说闭包,什么是闭包?闭包的作用是什么呢?

    用我自己的话来说,我认为有两点①、闭包就是能够读取其他函数内部变量的函数。

                   ②、将函数内部和函数外部连接起来的桥梁。

                   ③、可能说的不对,欢迎大家提出意见,哈哈。

    首先来看一个例子

    function foo(){
        var n=0;
    }
        foo()
       console.log(n);//n is not defined
    按照古老定义,包含变量n的函数foo就是闭包,但是由于变量n在作用域外,所以报这个错误
    但是我们要怎么获取到n的值呢,如下
    var n=0;
    function foo(){
        var n=0;
    }
    foo();

    个人理解1、嵌套在foo函数里的bar函数就是闭包

    function foo(){
        var a=2;
        bar();
        function bar(){
            console.log(a);//2
        }
    }
    foo();

    2.闭包是指在函数声明时的作用域以外的地方呗调用的函数

    function foo(){
        var a=2;
        function bar(){
            console.log(a);//2
        }
        return bar;
    }
    foo()();

    3.上面写法的缩写就变成了

    function foo(){
        var a=2;
        return function(){
            console.log(a)//2
        }
    }
    foo()();

    4.在foo()函数作用域声明,在bar2函数的作用域被调用的bar2函数是闭包

    function foo(){
        var a=2;
        function bar2(){
            console.log(a);//2
        }
        bar(bar2);
    }
    function bar2(fn){
      fn();  
    }
    foo();

    以上就是我对闭包的理解,可能讲的也不是很清楚,但是最主要还是要自己操作了才能更好的理解。

  • 相关阅读:
    STM32F4 SPI双机通讯调试总结
    Altium Designer (DXP) 复制粘贴,放器件 出错报异常的原因
    C++中一个0xC0000005访问冲突问题
    将Windows 7安装到移动固态硬盘(U盘)
    Delphi 的TStringBuilder防止服务器内存碎片化
    Delphi XE5的Android开发平台搭建
    利用RTTI实现Delphi的多播事件代理研究
    博客即将同步至 OSCHINA 社区
    用太极拳讲分布式理论,真舒服!
    记录一次C#调用Delphi编写Dll程序过程
  • 原文地址:https://www.cnblogs.com/zczc1996/p/10449233.html
Copyright © 2011-2022 走看看