9 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊
因為js沒有 public private protect
所以才要用用閉包這種手段來實(shí)現(xiàn) 其他語言的封裝特性
?
對于你的代碼 后者 可以直接取到n、
f1.n
但是前者只能通過方法?

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊
閉包中 ?
function f1(){
var n = 1;
function f2(){
return n
}
}
與?
var f1 = function(){};
f1.prototype = {
n : 1,
f2 : function(){
return this.n;
}
}
這兩者 有機(jī)區(qū)別嗎?

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
@小碼蟻·興: 有區(qū)別的,前者是無法改變n的值的,后者卻可以通過f1.protorype.n = 2來修改值,這就是很大的區(qū)別了。

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊
一般的編程語言呢?一個函數(shù)或者一段過程,它只管輸入和輸出,至于處理過程它不管的(外面無法訪問里面),因為在處理過程中使用過的材料(變量),用它就銷毀了。
但是有些編程語言呢?它還關(guān)注處理的過程。外面 可以訪問里面的變量。

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
函數(shù)內(nèi)部可以訪問到外部變量叫做閉包。全局函數(shù)相對全局變量就是個閉包,閉包變量會一直存儲于內(nèi)存。一般來說都是用(function(){})();這種形式封裝代碼,像一些插件什么的。我三年了理解也不深,表達(dá)也表達(dá)不是很明白。
添加回答
舉報