javascript - javascript私有(private)静态字段如何在底层工作?

标签 javascript

我正在阅读 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

为什么“计数器”成为静态成员?

非常感谢!

最佳答案

Gadgetcounter 的闭包。每当您调用 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/

相关文章:

javascript - 在Vue中为===相等分配右值

javascript - 设置cookie然后重定向

javascript - 在 Javascript 中读取函数内部的变量?

用于匹配整个单词的 Javascript 正则表达式

javascript - 需要有关如何在 Cygwin 中开始使用 YUI YETI 进行 JS 测试的帮助

javascript - 请求交付方式不起作用 - 向 Monster 申请

具有图像上传功能的 Javascript 所见即所得编辑器(与 JEditable 一起使用)

javascript - 使用 Google Apps 脚本将文本文件上传到 Google 云端硬盘

javascript - 带有选项卡菜单的平面列表

javascript - 如何在 Angular 指令中使用 <head> 标签