当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在JavaScript中不使用`window`来检查动态全局变量?》经验,为你挑选了1个好方法。

我需要在JavaScript中传递一个变量名列表,并检查这些变量是否存在.我尝试了以下但它似乎没有做的伎俩(JSFiddle 在这里):

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']);

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

    变量test1已定义.

    变量test2已定义.

    变量test3未定义.

使用下面的技巧似乎很容易修复,但有没有其他方法来实现这一点?是否window以追踪它们的唯一方式声明全局变量 ?`

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

有没有更好的方法来做到这一点,还是这是正确的方法?

香草JS只回答了.



1> epascarello..:

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

在此输入图像描述

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

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']);
});

将代码更改为在正文的头部或末尾运行.我将你的代码分叉到头脑中运行:https://jsfiddle.net/phrhxyzL/1/,你得到了你期望的结果.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有