簡體   English   中英

Javascript。 實際上,閉包和動態“ this”綁定有什么區別?

[英]Javascript. What is the difference between closures and dynamic 'this' binding practically speaking?

我認為使用閉包可以實現的內容與使用Javascript構造函數可以實現的內容之間存在大量重疊-盡管不同的結構在API中存在一些細微差異。

這段代碼:

function Animal1(name) {
    this.name = name;
};
var x = new Animal1('x');
console.log(x.name); // x

在功能上似乎與此代碼非常相似:

function Animal2(name) {
    var name = name;
    var getName = function() {return name;};
    return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y

除了x被分配了__proto__屬性。 如果您不打算在代碼中使用原型繼承,那么如何在閉包和上面的構造函數之間進行選擇?

即哪個需要更多的內存? 哪個更有效? 還有其他事情要考慮嗎? 等等等

function Animal2(name) {
    var name = name;
    var getName = function() {return name;};
    return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y

在前面的代碼中,每次調用Animal2時都會生成getName函數。 在這種情況下,這當然是微不足道的,但是此方法既需要更多的內存,又比較慢。 此方法的優點是,由於可以在不公開的函數之間共享私有變量,因此可以實現一定程度的封裝。

請查看以下內容以了解更多信息: https : //developers.google.com/speed/articles/optimizing-javascript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM