2015-03-31 3 views
0

Я всегда удивлялся этому, и время от времени он всплывает.Можно ли использовать необъявленную переменную в другой переменной

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

Теперь это все сделано вверх (очевидно), но посмотрит, как переменный «пользователь» проверяет для детей [J], хорошо, если бы я попытался использовать этот код, он пришел бы с ошибкой вместе строки «Невозможно прочитать свойство» getElementsByTagName «неопределенного». Теперь мой вопрос: есть ли способ разрешить этот код работать без сообщения об ошибке и не выполнять. Я использовал бы это для чистого кода в цикле if, как и все переменные. Это не будет единственным экземпляром используемой переменной user, так что это очень полезно.

Заранее благодарен,

Daniel.

+0

что такое 'j' во второй строке? Я думаю, вы смешались с чуваком. – vsync

+0

@vsync Я думаю, что это 'j' из цикла. –

+2

вы используете j до его определения. 'document.getElementsByClassName (" class-name ") [0] .children [undefined] = undefined'. Вот где ваша ошибка исходит от –

ответ

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); 
+0

Благодарим вас за разъяснение этого и пример того, как он может работать! Я не ожидал рабочего ответа, поэтому спасибо за это :) Да, я должен согласиться с тобой, это просто усложняет ситуацию, но если мне когда-нибудь понадобится рабочее решение, это будет сделано! –

Смежные вопросы