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

Javascript 是否可以在另一个变量中使用未声明的变量,javascript,scope,var,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].chi

我一直在想这一点,但它不时会出现

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循环中使用它作为干净的代码,就像所有的变量都用于。这也不是正在使用的用户变量的唯一实例,因此它非常有用

提前感谢,

Daniel。

如果在for循环之前使用j变量,它将具有未定义的值

您可以将其放入函数闭包中,但在我看来,使用这样的变量并不能使代码可读。您可以做的是创建一个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);

第二行的j是什么?我想你把事情搞混了,伙计。@vsync我猜它是循环中的j。在定义j之前,你正在使用它。document.getElementsByClassNameclass名称[0]。子项[undefined]=未定义。这就是错误的来源否,在尝试将其用作对象引用之前,您必须使用自己的代码检查是否存在值。首先,正如您所预测的,当您是declaringuser变量时,它会抛出错误,因为没有定义j。那么您的逻辑将不起作用,因为for循环只在for花括号{}内循环。因此,除非您将用户变量声明放在for循环开始之后,否则您的用户变量永远不会更改。感谢您澄清这一点,并给出一个它可能如何工作的示例!我没想到会有一个有效的答案,所以谢谢你:是的,我不得不同意你的观点,这会让事情变得复杂,但是如果我需要一个有效的解决方案,这就可以了!