JavaScript 中的静态变量
- 在 JavaScript 中使用函数的属性来创建静态变量
- 在 JavaScript 中使用 IIFE(立即调用函数表达式)创建静态变量
-
在 JavaScript 中使用
arguments.callee
创建静态变量 - 在 JavaScript 中使用构造函数创建静态变量
本教程介绍了如何在 JavaScript 中创建静态变量。静态变量是通常在函数中使用的变量,它们在函数调用之间保持其值。static
关键字有助于定义类的静态属性或方法。
在 JavaScript 中使用函数的属性来创建静态变量
JavaScript 中的函数是对象,可以具有属性。因此,我们可以通过声明函数的属性来创建静态变量。它们像全局变量一样保持其值,并且不能在函数外部进行修改,这使其比全局变量更整洁。
function getId() {
if ( typeof getId.counter == 'undefined' ) {
getId.counter = 0;
}
alert(++getId.counter);
}
多次调用上述函数会增加计数器的值,并且无法在函数外部访问,如阻止所有混乱的全局变量。
在 JavaScript 中使用 IIFE(立即调用函数表达式)创建静态变量
IIFE 是在定义后立即执行的函数。它由两部分组成:
- 匿名函数,其词法范围由分组运算符
()
包围。 - 由 JavaScript 直接解释的函数表达式。
var incr = (function () {
var i = 1;
return function () {
return i++;
}
})();
incr(); // returns 1
incr(); // returns 2
每调用一次函数,计数器 i
就增加一。i
在外部是无法访问的,因为它是函数的属性,就像类中典型的静态变量一样。
在 JavaScript 中使用 arguments.callee
创建静态变量
我们可以使用 arguments.callee
在 JavaScript 中存储静态变量。它指的是当前正在执行的函数,我们可以像直接附加到函数对象一样直接将属性附加到该函数。
function ()
{
arguments.callee.myStaticVar = arguments.callee.myStaticVar || 1;
arguments.callee.myStaticVar++;
alert(arguments.callee.myStaticVar);
}
此方法与方法 1 非常相似,唯一的区别是不是直接附加属性,而是使用 arguments.callee
将属性添加到当前执行的函数中。
在 JavaScript 中使用构造函数创建静态变量
该方法是强类型的面向对象的语言(如 C++
/Java
/C++
)的等效版本。我们尝试将变量分配给整个类型,而不是所有实例。
function delftClass()
{
var privateVariable = "foo";
this.publicVariable = "bar";
this.privilegedMethod = function ()
{
alert(privateVariable);
};
}
delftClass.prototype.publicMethod = function ()
{
alert(this.publicVariable);
};
delftClass.staticProperty = "baz";
var myInstance = new delftClass();
在这里,我们创建构造函数 delftClass
,然后分配一个与创建的实例无关的静态属性。JavaScript 将函数视为对象,因此作为对象,我们可以为函数分配属性。所有实例将共享静态变量。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn