閉包算是前端面試的基礎(chǔ)題,但我看了很多關(guān)于閉包的文章博客,但感覺很多對于閉包的理想還是有分歧的,現(xiàn)在網(wǎng)上對閉包的理解一般是兩種:

  1. 有些文章認(rèn)為閉包必須要返回嵌套函數(shù)中里面用到外面函數(shù)局部變量的方法才叫閉包,有兩個條件:1)、函數(shù)嵌套,內(nèi)部函數(shù)要用到外部函數(shù)的局部變量 2)、內(nèi)部函數(shù)必須返回
  2. 有些文章認(rèn)為只要函數(shù)嵌套內(nèi)部函數(shù)用到了外部局部變量就是閉包,不要返回內(nèi)部函數(shù)   

我們先看看閉包的定義到底是什么,然后在來分析我在學(xué)習(xí)js的時候不同階段對閉包的誤解。在高級程序設(shè)計中對閉包定義是這樣的:“閉包是指有權(quán)限訪問另一個函數(shù)作用域中的變量的函數(shù)?!斑@里沒有提到這個函數(shù)必須要return出來,我們在看看語言精粹中對閉包的定義是用一段很誤導(dǎo)人的代碼例子來解釋閉包:

復(fù)制代碼
var quo=function(status){ return{
    get_status:function(){ return status;
    }
  }
} var myQuo=quo("amazed");
document.writeln(myQuo.get_status());
復(fù)制代碼

"即使quo返回了,但get_status方法仍然享有訪問quo對象的status屬性的特權(quán),get_status方法并不是訪問該參數(shù)的一個副本,它訪問的是該參數(shù)本身,只是可能的,因為該

網(wǎng)友評論