2017-07-11 22 views
1

我對任何編碼都很陌生,所以我很抱歉如果這個問題似乎容易搜索,但我不知道在這裏尋找什麼。重構函數和變量沒有定義

我在這裏要做的是創建div,並把它放在「level」div(或var header)之前。然後我想在該div中放置一張圖片。最終我想把三個圖像放在那裏,所以我試圖重構一下,所以它不會是一個長函數(我敢肯定這不是DRY,而是嬰兒的步驟)。下面的代碼不起作用,因爲「medalDiv」沒有定義。當我從awardTimeMedal()插入代碼而不是調用該函數時,它可以正常工作。我不確定這是否是一個範圍問題,但是我認爲自medalDiv在awardMedal()中被定義爲awardTimeMedal可以訪問它。

​​

我也試過沒有「return medaldiv」聲明。

謝謝。如果我沒有遵循任何適當的禮儀並且有任何幫助表示讚賞,我很抱歉。

編輯:好的,這是有道理的。非常感謝。

回答

0

var medalDiv是awardMedal的本地化,並用於awardTimeMedal。把它放在全球範圍內有權訪問。

-1

的最主要的原因,你的第一個功能不工作是因爲awardTimeMedal沒有獲得medalDiv

我相信一個更好的辦法是回到awardTimeMedal元素和awardMedal功能添加它,就像我所下面做:

function awardMedal(){ 
    var medalDiv = document.createElement("div"); 
    var timeMedal = awardTimeMedal(); 
    medalDiv.appendChild(timeMedal); 

    var header = document.getElementById("level"); 
    header.insertBefore(medalDiv, header.childNodes[0]); 
} 

function awardTimeMedal(){ 
    var timeMedal = document.createElement("img"); 
    timeMedal.src = properties.MEDAL_OFF; 
    timeMedal.className = "medals"; 
    return timeMedal; 
} 
0

更新前者功能

function awardMedal(){ 
    var medalDiv = document.createElement("div"); 
    awardTimeMedal(medalDiv); 
    var header = document.getElementById("level"); 
    header.insertBefore(medalDiv, header.childNodes[0]); 

} 

function awardTimeMedal(medalDiv){ 
    var timeMedal = document.createElement("img"); 
    timeMedal.src = properties.MEDAL_OFF; 
    timeMedal.className = "medals"; 
    medalDiv.appendChild(timeMedal); 
    return medalDiv; 
} 
0

問題是,當您調用awardTimeMedal()時,您必須將返回值存儲在變量中,以便可以從調用進程訪問它,即awardMedal()。所以,

var ref = awardTimeMedal(); 

現在你可以使用ref來追加到正確的元素。 FYI,無論何時使用var或function關鍵字,它都會在JavaScript中創建一個新的詞法範圍。這意味着當前範圍與新引入的範圍嚴格相關。當您嘗試訪問該範圍內的變量或引用時,編譯器會查看範圍的堆棧,並且如果未找到引用的變量,則在父範圍內。如果沒有明確防範,父範圍通常會解析爲文檔。