2015-03-31 101 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],以及如果我嘗試使用此代碼,它會拿出一個錯誤沿「Can not read property'getElementsByTagName'of undefined」。現在我的問題是:有沒有一種方法可以讓這段代碼在沒有提供錯誤信息而沒有執行的情況下工作。我會在if循環中使用這個乾淨的代碼,就像所有的變量都被使用一樣。這不是使用「user」變量的唯一實例,所以它非常有用。

在此先感謝,

丹尼爾。

+0

什麼是'j'在第二行?我認爲你把事情搞混了。 – vsync 2015-03-31 16:55:01

+0

@vsync我想它是來自循環的'j'。 – 2015-03-31 16:55:22

+2

您在定義之前使用j。 'document.getElementsByClassName(「class-name」)[0] .children [undefined] = undefined'。這就是你的錯誤來自 – 2015-03-31 16:57:46

回答

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

謝謝你澄清,並舉例說明它是如何工作的!我並不期待一個可行的答案,所以謝謝你:)是的,我不得不同意你的看法,它只是讓事情變得複雜化,但如果我需要一個工作解決方案,那麼這樣做! – 2015-03-31 17:09:43

相關問題