Javascript.闭包和dynamic'这'实际上具有约束力

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

本文关键字:约束力 实际上 Javascript 闭包 dynamic      更新时间:2023-09-26

我认为,在使用闭包可以实现的目标和使用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