迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

JavaScript 中的静态变量

作者:迹忆客 最近更新:2023/03/11 浏览次数:

本教程介绍了如何在 JavaScript 中创建静态变量。静态变量是通常在函数中使用的变量,它们在函数调用之间保持其值。static 关键字有助于定义类的静态属性或方法。

在 JavaScript 中使用函数的属性来创建静态变量

JavaScript 中的函数是对象,可以具有属性。因此,我们可以通过声明函数的属性来创建静态变量。它们像全局变量一样保持其值,并且不能在函数外部进行修改,这使其比全局变量更整洁。

function getId() {
    if ( typeof getId.counter == 'undefined' ) {
        getId.counter = 0;
    }
    alert(++getId.counter);
}

多次调用上述函数会增加计数器的值,并且无法在函数外部访问,如阻止所有混乱的全局变量。

在 JavaScript 中使用 IIFE(立即调用函数表达式)创建静态变量

IIFE 是在定义后立即执行的函数。它由两部分组成:

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 将函数视为对象,因此作为对象,我们可以为函数分配属性。所有实例将共享静态变量。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 PHP 中获取时间差的分钟数

发布时间:2023/03/29 浏览次数:183 分类:PHP

本文介绍了如何在 PHP 中获取时间差的分钟数,包括 date_diff()函数和数学公式。它包括 date_diff()函数和数学公式。

PHP 中的重定向

发布时间:2023/03/29 浏览次数:136 分类:PHP

本教程演示了如何将用户从页面重定向到 PHP 中的其他页面

PHP 分页

发布时间:2023/03/29 浏览次数:66 分类:PHP

本教程介绍如何在 PHP 中对数据库行进行分页

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便