【问题标题】:How to create javascript globally accessible static variable?如何创建javascript全局可访问的静态变量?
【发布时间】:2013-06-12 05:29:58
【问题描述】:

我想创建一个全局可访问的变量。 当我们想改变时,它必须改变。 更改后必须给出更改后的值。

var language ="english";

function getGlobalVar(varName) {
    if(varName == "language"){
        return language;
    }
}

function setGlobalVar(varName, value) {
    if(varName == "language"){
       language = value;
    }
}

当我们在其他页面使用getGlobalVar("language")时,它必须给出改变后的值。

【问题讨论】:

    标签: javascript static global-variables


    【解决方案1】:

    全局变量只是附加到window的变量:

    window.language = 'english';
    
    function getGlobalVar(bar) {
      return window[bar];
    }
    

    建议您创建自己的命名空间以避免以后出现问题:

    window.MY = {};
    MY.language = 'english';
    

    【讨论】:

    • 我认为这个答案适用于我的全局变量问题。但是使用它我们不能跨页面创建静态变量。现在我认为在 JavaScript 中跨页面创建静态变量是不可能的。
    • 你可以使用 history api 并将它们传递到 URL 或使用 localStorage。
    【解决方案2】:

    当我们在其他页面中使用 getGlobalVar("language") 时,它必须给出 改变值

    网络使用无状态协议,即信息不会在页面之间持续存在。为了解决这个问题,您可以在客户端或服务器端解决方案(如会话)上使用 cookie。

    试试这个:

    1.htm

    <script type="text/javascript">
        window.val = "hello world";
        alert(window.val);
        window.location.href = "2.htm"
    </script>
    

    2.htm

      <script type="text/javascript">
        alert(window.val);
      </script>
    

    cookie 示例:

    1.htm

    <script type="text/javascript">
        var in_one_year = new Date();
        in_one_year.setFullYear(in_one_year.getFullYear() + 1);
        document.cookie = "language=English" +
                          ";expires=" + in_one_year.toGMTString();
    
    
        all_cookies = document.cookie
        alert(all_cookies);
        window.location.href = "2.htm"
    </script>
    

    2.htm

    <script type="text/javascript">
        alert(document.cookie);
    </script>
    

    【讨论】:

    • 这意味着每次我们引用 javascript 文件时它都会提供新的实例?
    • 与js文件无关。如果你使用js给网页的window对象附加一个值,那么当一个新的页面被加载的时候,不会有任何信息持久化,即新页面的window对象不会附加任何值.
    • 我们不能在 JavaScript 文件中创建一个跨页面持久存在的静态变量,而无需将变量附加到窗口对象吗?
    • 您必须明白 www 使用 无状态协议。在你理解这意味着什么之前,你无法理解网络编程。
    • 好的,我明白你说的js文件是什么意思了。您当然可以为 javascript 类创建静态变量。但是,当新页面加载时,该页面将需要加载 js 文件才能访问该类。您的 js 文件将重新加载,就该页面而言,这是第一次使用该类,静态变量将具有其初始状态。
    【解决方案3】:

    支持本地存储的大多数浏览器的另一种解决方案。

    JStorage - store data locally with JavaScript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多