前端面試之閉包理解


講之前我想說說我面試的經驗,懶散了許久的我,在第一次面試必須被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();

以上就是我對閉包的理解,可能講的也不是很清楚,但是最主要還是要自己操作了才能更好的理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM