javascript - 如何在 JavaScript 中不使用 `window` 检查动态全局变量?

标签 javascript scope

我需要在 JavaScript 中传递变量名称列表并检查这些变量是否存在。我尝试了以下方法,但它似乎没有起作用(JSFiddle here):

var test1 = 'test1';
var test2 = 'test2';

function checkVariable(variableNameList) {
    for (var iterator = 0; iterator < variableNameList.length; iterator++) {
        var variableName = variableNameList[iterator];
        if (typeof window[variableName] === 'undefined') {
            alert('Variable ' + variableName + ' is not defined');
        } else {
            alert('Variable ' + variableName + ' is defined');          
        }
    }
}

checkVariable(['test1', 'test2', 'test3']);

我正在尝试获取结果警报:

  1. 变量 test1 已定义。
  2. 变量 test2 已定义。
  3. 变量 test3 未定义。

使用下面的技巧似乎很容易修复,但是还有其他方法可以实现此目的吗?正在 window 下声明全局变量追踪他们的唯一方法?`

window.test1 = 'test1';
window.test2 = 'test2';

是否有更好的方法来做到这一点,或者这是正确的方法吗?

请仅使用 Vanilla JS 回答。

最佳答案

它不起作用,因为变量不在全局范围内,它们在 window.onload 函数范围内。

enter image description here

您的代码实际上是这样运行的:

window.addEventListener("load", function () {
    var test1 = 'test1';  /* these are not global because of */
    var test2 = 'test2';  /* running inside of window.onload */

    function checkVariable(variableNameList) {
    }

    checkVariable(['test1', 'test2', 'test3']);
});

更改代码以在头部或正文末尾运行。我 fork 了你的代码以在头部运行:https://jsfiddle.net/phrhxyzL/1/然后您就会得到预期的结果。

关于javascript - 如何在 JavaScript 中不使用 `window` 检查动态全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499427/

相关文章:

c - 什么是 C 局部函数声明机制?

javascript - Gatsby Develop 和 Build 给出不同的结果

javascript - 验证是否已选中复选框或单选按钮

javascript - 在 vue 中完成 v-for 后运行 jQuery 函数?

javascript - 如何从函数而不是窗口调度事件

javascript - 每次用户点击时切换 CSS 类 - Jquery

c# - 多线程和 lambda 变量范围

c++ - 如何从自己类的成员函数中访问公共(public)变量? (C++)

JavaScript作用域问题

c++ - 堆上的对象何时超出范围