前端面試之閉包理解

講以前我想說說我面試的經驗,懶散了許久的我,在第一次面試必須被pass掉了。可是經過此次面試我也進行了深入的檢討。雖說有將近兩年開發經驗的我,可是真的只懂得些皮毛,至於它底層的原理是怎麼實現的,說不出個因此然了,面試了一家,那個面試官超nice,還給了我不少好的建議,我也默默的想作出相應的改變,好比真的須要多夯實基礎,不少公司比較重視基礎,而不是說你懂了有哪些框架,好了,不在這裏噼裏啪啦的亂講一通了,後期有空會把面試遇到的面試題跟你們分享哦,敬請期待!哈哈哈。。。。面試

好咯,如今來講說閉包,什麼是閉包?閉包的做用是什麼呢?閉包

用我本身的話來講,我認爲有兩點①、閉包就是可以讀取其餘函數內部變量的函數。框架

               ②、將函數內部和函數外部鏈接起來的橋樑。函數

               ③、可能說的不對,歡迎你們提出意見,哈哈。spa

首先來看一個例子code

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();

我的理解一、嵌套在foo函數裏的bar函數就是閉包blog

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函數是閉包io

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

以上就是我對閉包的理解,可能講的也不是很清楚,可是最主要仍是要本身操做了才能更好的理解。

相關文章
相關標籤/搜索