閉包使用之兩類互動

2021-06-18 19:11:37 字數 931 閱讀 8631

應用場景:a為應用類庫,b為基礎類庫,a在初始化過程中需要先初始化b,並且在b初始化完成之後,再繼續進行a的初始化

function a() 

function b(){}

a.prototype.contineinit = function ()

var a = new a();

如果b的初始化最終完成一直都是同步的而不存在非同步問題,那麼上面就**就ok,但實際情況中經常出現非同步的情況,那麼

上面**就無法滿足,首先我修改b,使之有乙個非同步的完成事件

function a() 

function b()

}a.prototype.contineinit = function ()

var a = new a();

執行上面的**會發現contineinit方法無法訪問到a中的data,使用谷歌的除錯工具發現此時contineinit方法的作用鏈域已經

不再是a範圍的域,而是b範圍的域,因此在這樣宣告方法contineinit已經有問題。

這個時候我需要調整contineinit方法的宣告方式,如下:

function a() 

b.initcompleted = contineinit;

//觸發完成事件

b.triggerinitcompleted();

}function b()

}var a = new a();

此時注意的是,contineinit方法的宣告已經是乙個區域性方法,第二將a類的屬性data賦值給了乙個區域性變數data2,這種方式就將a類

的域和b類的域連線了起來,這就是閉包的作用。

通俗的說,閉包是宣告在函式中的函式,將外圍函式中的區域性變數放在內部函式中操作。

閉包 閉包作用之儲存 一

函式執行形成乙個私有作用域,函式執行完成,開成的這個棧記憶體一般情況下都會自動釋放 函式執行完成,當前私有作用哉 棧記憶體 中的某一部分內容被記憶體以外的其它東西 變數 元素的事件 占用了,當前的棧記憶體就不能釋放掉,也就形成了不銷毀的私有作用域 裡面的私有變數也不會銷毀 函式內部可以訪問函式外部的...

javascript閉包使用

之前看到一段 很是不能理解,然後就查詢資料並且找網路上得大牛請教,最後弄懂了這段 然後就拿出來總結一下。先來看一段 var arrtest for var i 0 i 3 i arrtest function function function console.log arrtest 0 tostr...

什麼是閉包?為什麼使用閉包?閉包的缺點?

閉包 即重用乙個變數,又保護變數不被汙染的一種機制。為什麼使用閉包 全域性變數和區域性變數都具有不可兼得的優缺點。全域性變數 優 可重用,缺 易被汙染。區域性變數 優 僅函式內可用,不會被汙染。缺 不可重用 何時使用 只要即重用乙個變數,又保護變數不被汙染時。如何 3步 1.用外層函式包裹要保護的變...