講之前我想說說我面試的經驗,懶散了許久的我,在第一次面試必須被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();
以上就是我對閉包的理解,可能講的也不是很清楚,但是最主要還是要自己操作了才能更好的理解。