幾個閉包記憶體洩漏的優化方案!

2021-07-26 04:19:19 字數 1732 閱讀 1367

原**:

"font-size:14px;">function

cars

()

cars.prototype.saycolor = function

();

};

var instance = new cars();

console.log(instance.saycolor()())

優化後:

"font-size:14px;">function

cars

()

cars.prototype.saycolor = function

();

outcolor = null; //釋放記憶體

};

var instance = new cars();

console.log(instance.saycolor()())

舉例:

"font-size:14px;">function

inheritprototype

(subtype,supertype)

function

cars

()

cars.prototype.saycolor = function

();

};

function

car()

inheritprototype(car,cars);

car.prototype.saynumber = function

()

};

};

var instance = new car();

console.log(instance.saynumber()()());span>

首先,該例子組合使用了建構函式模式和原型模式建立cars 物件,並用了寄生組合式繼承模式來建立car 物件並從cars 物件獲得屬性和方法的繼承;

其次,建立乙個名為instance 的car 物件的例項;instance 例項包含了saycolor 和saynumber 兩種方法;

最後,兩種方法中,前者使用了乙個閉包,後者使用了兩個閉包,並對其this 進行修改使其能夠訪問到this.color 和this.number。

這裡存在記憶體洩露問題,優化後的**如下:

"font-size:14px;">function

inheritprototype

(subtype,supertype)

function

cars

()

cars.prototype.saycolor = function

();

this = null; //這裡

};

function

car()

inheritprototype(car,cars);

car.prototype.saynumber = function

()

};

this = null; //這裡

};

var instance = new car();

console.log(instance.saynumber()()());span>

閉包之記憶體洩漏

對於全域性變數來說如果沒有主動銷毀則將永遠存在.即如果沒有主動的將其置為null,其始終會佔據一部分記憶體.而對於函式內使用var宣告的區域性變數來說,當函式執行完畢後區域性變數會自行銷毀.function f f 而閉包的結構則可以改變變數的生存週期,使區域性變數不被銷毀 var cost fun...

閉包的幾個例子

記錄關於閉包的幾個例子,網上介紹閉包文章很多,暫時就不作解釋。1.作用域鏈的延伸var global 1 function outer return inner 必須return出去 inner 62.全域性函式佔位符var inner placeholder var f function inne...

C 委託 Lambda表示式 閉包和記憶體洩漏

首先看看委託的常見的使用情景 定義乙個委託 使用剛定義的委託宣告乙個委託變數 根據需要將方法和該變數繫結,最後在合適的地方使用它。形式如下 定義委託 public delegate void somedelegate class someclass public static void static...