gpt4 book ai didi

javascript - 如果全局变量不存在,如何初始化它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:52:51 24 4
gpt4 key购买 nike

我多次在页面中加载相同的脚本。由于异步/加载功能,我在决定在我的网站上先/后加载哪个时遇到了一些麻烦。

所以,我想放置一个全局变量来计算脚本加载时的顺序。

所以 myScript.js 将以 :

(function () {
var privateNumberScriptLoaded;

if (numberScriptLoaded === undefined) {
numberScriptLoaded = 0;
}
else {
numberScriptLoaded = numberScriptLoaded + 1;
}

privateNumberScriptLoaded = numberScriptLoaded;
console.log(privateNumberScriptLoaded);
})();

但是当我加载它时:

<script src="http://www.mywebsite.com/widget/myScript.js?type=normal" type="text/javascript"></script>
<script src="http://www.mywebsite.com/widget/myScript.js?type=rotation" type="text/javascript"></script>

我得到(两次)numberScriptLoaded is not defined

如何解决这个问题?事实上,如果它不存在,我会在我的网站中“创建”一个全局变量。比增加它并存储在每个脚本的“私有(private)”变量中,这样我就可以保存每个脚本的执行顺序。

最佳答案

目前,您的脚本成为 The Horror of Implicit Globals 的牺牲品.我建议不要这样做。

你有三个选择:

  1. 由于所有全局变量最终都作为 window 的属性,您可以显式使用 window:

    if (!window.numberScriptLoaded) {
    window.numberScriptLoaded = 1; // 1, not 0
    }
    else {
    ++window.numberScriptLoaded;
    }

    与没有 window. 前缀的代码不同,它不会抛出 ReferenceError,因为查找对象的属性与解析独立标识符的工作方式不同。

    Live demo | demo page source | source of script it loads

  2. 始终将 var numberScriptLoaded;(不带初始值设定项)放在脚本的全局范围内,例如在你的范围函数之外:

    var numberScriptLoaded; // No initializer (no = 0 or anything)

    在第一次加载时,这将创建变量;在随后的加载中,这是一个空操作。然后你可以在没有 ReferenceError 的情况下执行此操作:

    if (!numberScriptLoaded) {
    numberScriptLoaded = 1; // 1, not 0
    }
    else {
    ++numberScriptLoaded;
    }

    Live demo | demo page source | source of script it loads

  3. 使用typeof。如果您将 typeof 设为不存在的变量,则不会得到 ReferenceError;你得到 "undefined"。然后您可以通过 window. 前缀创建它(这样您就不会成为The Horror 的牺牲品)。

    if (typeof numberScriptLoaded === "undefined") {
    // Assigning to window.numberScriptLoaded creates the global
    window.numberScriptLoaded = 1; // 1, not 0
    }
    else {
    ++numberScriptLoaded;
    }

    Live demo | demo page source | source of script it loads

关于javascript - 如果全局变量不存在,如何初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com