2016-11-05 70 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