2016-11-05 104 views
1

因此,我正在製作一個小型閃存卡應用程序在rails中,並且我正在爲卡邏輯使用javascript。我是新來的JS,我有當我運行randomCard功能elem.innerHTML = rand.back;與新的「更新了一些麻煩resettingvariables我根據我的randomizing function試圖用JavaScript函數設置一個全局變量

<script> 
var card_list = "<%=j @deck.cards.to_json.html_safe %>"; 
console.log(card_list) 

/* Parse the Json and get all the cards */ 
var cards = JSON.parse(card_list); 

/* Return json object count */ 
var length = Object.keys(cards).length; 
console.log(length) 

/* Grab a random card from the card list */ 
var rand = cards[Math.floor(Math.random() * cards.length)]; 
console.log(rand) 

/* Set the front label from random value */ 
var front = rand.front; 
console.log(front) 

/* Set the back label from random value */ 
var back = rand.back; 
console.log(back) 

/* Grab the div and set the label */ 
var elem = document.getElementById("card-face"); 
elem.innerHTML = rand.back; 

/* Grab another random card from the card list */ 
function randomCard() { 
var rand = cards[Math.floor(Math.random() * cards.length)]; 
console.log(rand) 
if (typeof front !== 'undefined') { 
alert("Undefined"); 
} 
else{ 
var front = rand.front; 
var back = rand.back; 
console.log("Should now be updated?") 
}; 
var elem = document.getElementById("card-face"); 
elem.innerHTML = rand.back; 
} 

/* Flip the card front to back */ 
function flipper() { 
var elem = document.getElementById("card-face"); 
if (elem.innerHTML== rand.front) elem.innerHTML = rand.back; 
else elem.innerHTML = rand.front; 
console.log(elem) 
} 
</script> 

結果使用卡frontback rand.back',但是當我翻轉卡'rand.front'時,rand.back返回會話開始時我設置的初始值。我如何具體更新這些值?

+2

你再在'randomCard'函數中聲明前後兩個局部範圍。不要使用'var front =',只是使用'front ='等等(你在本地範圍內的聲明隱藏全局範圍內的聲明) – Tibrogargan

+0

分享你的json文件或內容來測試代碼 –

回答

1

裏面你randomCard功能,要創建這個函數的局部範圍內新frontback變量每次都執行該功能的時間和聲明變量var

由於與名稱frontback現在住的這個函數的局部範圍內的變量,賦值發生在當地frontback變量,因爲它們在不久的背景下存在;它不需要查看randomCard函數以外的環境,其中您想要更新的變量frontback就位於此處。

爲了得到你想要的根本就沒有與var關鍵字聲明frontback變量,你randomCard內的行爲,以便對它們的任何分配發生外frontback

-3

更換

var rand = cards[Math.floor(Math.random() * cards.length)]; 

rand = cards[Math.floor(Math.random() * cards.length)]; 
+0

隨機卡在本地範圍內選擇並不是問題 - 它是在'randomCard'函數中重新聲明後端和前端,當預期的行爲是它將全局地改變它們以用於'flipper()' – Brian

+0

Plus,字面上跟隨這些說明會造成傷害。他會完全失去「rand」的聲明,從而導致腳本在嚴格模式下失敗。 – Tibrogargan