是否可以在另一个变量中使用未声明的变量

时间:2015-03-31 16:52:30

标签: javascript scope var

我一直想知道这一点,并且不时出现它。

var name = document.title;
var user = document.getElementsByClassName("class-name")[0].children[j].getElementsByTagName("a")[0].innerHTML;
var someArr = [];

for (var j = 0; j < document.getElementsByClassName("class-name")[0].children.length; j++) {
    if (user == name) {
        someArr.push(user)
    };
};

alert(someArr);

现在这一切都已经完成了(很明显),但是看看变量“user”是如何检查孩子的[j],如果我尝试使用这段代码,那么就会出现一个错误。无法读取未定义的属性'getElementsByTagName'。现在我的问题是:有没有办法让这段代码工作而不会给出错误信息而不执行。我会在if循环中将它用于干净的代码,就像所有变量一样。这不是“user”变量的唯一实例,因此它非常有用。

提前致谢,

丹尼尔。

1 个答案:

答案 0 :(得分:0)

如果您在 j循环之前使用undefined变量将具有for值。

你可以将它放在一个函数闭包中,但是使用这样的变量并不能使代码在我看来是可读的。你可以做的是创建一个getUser()函数,并缓存元素数组。像这样:

var name = document.title;
var getUser = function(elem) {
   return elem.getElementsByTagName('a')[0].innerHTML;
};
var initialArr = document.getElementsByClassName("class-name")[0].children;
var someArr = [];

for (var j = 0; j < initialArr.length; j++) {
    var user = getUser(initialArr[j]);
    if (user == name) {
        someArr.push(user)
    };
};

alert(someArr);