我正在阅读 Stoyan Stefanov 的“Javascript 模式”。我对私有(private)静态成员部分感到困惑——它是如何工作的。
var Gadget = (function () {
var counter = 0;
return function () {
console.log(counter += 1);
};
}());
var g1 = new Gadget(); // logs 1
var g2 = new Gadget(); // logs 2
为什么“计数器”成为静态成员?
非常感谢!
最佳答案
Gadget
是counter
的闭包。每当您调用 Gadget
时,1
都会添加到 counter
。
如果你把代码写成这样可能会更容易看
var counter = 0;
var Gadget = function () {
console.log(counter += 1);
};
var g1 = new Gadget(); // logs 1
var g2 = new Gadget(); // logs 2
相反。应该清楚只有一个 counter
变量,并且每当调用 Gadget
时它的值都会增加。
您的代码的不同之处在于它被包装在 IIFE 中, 因此 counter
不能从 IIFE 返回的函数(分配给 Gadget
)以外的任何其他函数访问,从而使 counter
“私有(private)”。
另请参阅:What is the (function() { } )() construct in JavaScript?
关于javascript - javascript私有(private)静态字段如何在底层工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368733/