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