Javascript 如何访问另一个函数中的变量
我正在为21点游戏编写代码,遇到了一些问题。我编写了两个函数:一个用于初始交易,另一个用于每个连续点击。这是交易功能:Javascript 如何访问另一个函数中的变量,javascript,Javascript,我正在为21点游戏编写代码,遇到了一些问题。我编写了两个函数:一个用于初始交易,另一个用于每个连续点击。这是交易功能: var deck = [1,2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"]; function deal() { var card1_val = Math.floor(Math.random() * deck.length); var card2_val = Math.floor(Math.random() * deck.len
var deck = [1,2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"];
function deal() {
var card1_val = Math.floor(Math.random() * deck.length);
var card2_val = Math.floor(Math.random() * deck.length);
var card1 = deck[card1_val];
var card2 = deck[card2_val];
var hand = card1 + ", " + card2;
{//card1 Conditionals
if (card1 == "Jack") {
card1_val = 10;
}
else if (card1 == "Queen") {
card1_val = 10;
}
else if (card1 == "King") {
card1_val = 10;
}
else if (card1 == "Ace") {
card1_val = 11;
}
}
{//card2 Conditionals
if (card2 == "Jack") {
card2_val = 10;
}
else if (card2 == "Queen") {
card2_val = 10;
}
else if (card2 == "King") {
card2_val = 10;
}
else if (card2 == "Ace") {
card2_val = 11;
}
}
var res = card1_val + card2_val;
document.getElementById("result").innerHTML = hand;
//document.getElementById("test").innerHTML = card1_val + ", " + card2_val;
if (res > 21) {
alert("Blackjack!");
}
}
function hit() {
var card_val = Math.floor(Math.random() * deck.length);
var nhand = deck[card_val];
bucket = hand + nhand
}
这是hit函数:
var deck = [1,2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"];
function deal() {
var card1_val = Math.floor(Math.random() * deck.length);
var card2_val = Math.floor(Math.random() * deck.length);
var card1 = deck[card1_val];
var card2 = deck[card2_val];
var hand = card1 + ", " + card2;
{//card1 Conditionals
if (card1 == "Jack") {
card1_val = 10;
}
else if (card1 == "Queen") {
card1_val = 10;
}
else if (card1 == "King") {
card1_val = 10;
}
else if (card1 == "Ace") {
card1_val = 11;
}
}
{//card2 Conditionals
if (card2 == "Jack") {
card2_val = 10;
}
else if (card2 == "Queen") {
card2_val = 10;
}
else if (card2 == "King") {
card2_val = 10;
}
else if (card2 == "Ace") {
card2_val = 11;
}
}
var res = card1_val + card2_val;
document.getElementById("result").innerHTML = hand;
//document.getElementById("test").innerHTML = card1_val + ", " + card2_val;
if (res > 21) {
alert("Blackjack!");
}
}
function hit() {
var card_val = Math.floor(Math.random() * deck.length);
var nhand = deck[card_val];
bucket = hand + nhand
}
如果你看hit(),我使用的是来自deal()的var hand。我不能使它全局化,因为我每次都需要一个新的随机值。如何在不重写代码行的情况下访问相同的变量?任何帮助都将不胜感激。您可以
- 仅使用
var-hand将
声明在功能范围之外编码>并在hand
功能中使用deal
,而无需将其重新定义为hand
李>var
- 或者在
功能中声明deal
时使用hand
window.hand
- 全局变量是邪恶的。我会采取更面向对象的方法,像这样
var Hand = function(bjcallback) { this.cards = []; this.onblackjack = bjcallback; this.deck = [1,2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"]; this.values = { "Jack": 10, "Queen": 10, "King": 10, "Ace": 11 }; this.sum = function() { var i, x, res = 0; for (i in this.cards) { x = this.cards[i]; if (typeof(x) != 'number') { x = this.values[x] }; res += x; }; return res }; this.pick = function() { var pos = Math.floor(Math.random() * this.deck.length); var card = this.deck[pos]; console.log(card); return card }; this.deal = function(n) { n = n || 2; for (var i=0; i<n; i++) this.cards.push(this.pick()) }; this.hit = function() { this.cards.push(this.pick()); if (this.sum() > 21) this.onblackjack(); } } var hurray = function() { alert('Blackjack!') }; var hand = new Hand(hurray); hand.deal(); hand.hit();
var Hand=函数(bjcallback){ 这个是.cards=[]; this.onblackjack=bjcallback; this.deck=[1,2,3,4,5,6,7,8,9,10,“杰克”、“女王”、“国王”、“王牌”]; 此参数的值={ “杰克”:10, “女王”:10, “国王”:10, “王牌”:11 }; this.sum=函数(){ 变量i,x,res=0; (我在这张卡片上){ x=这张卡片[i]; 如果(typeof(x)!='number'){x=this.values[x]}; res+=x; }; 返回res }; this.pick=函数(){ var pos=Math.floor(Math.random()*this.deck.length); var卡=此.卡组[pos]; 控制台日志(卡片); 回程卡 }; this.deal=函数(n){ n=n | | 2; 对于(vari=0;i21)这个.onblackjack(); } } var hurray=function(){alert('Blackjack!'}; var hand=新手(万岁); hand.deal(); hand.hit();
请注意,我不太喜欢卡片,所以我可能会混淆术语或从
:deal
Return hand开始计算Return
代码>。返回手后,如何访问变量?我不能在不刷新随机数的情况下调用该函数。不过,它们都会使其成为全局变量。如果我将hand设置为全局变量,则它将在整个游戏中保持不变(我必须刷新页面才能重新开始)。我不想这样做(特别是因为我计划合并一个系统来保存分数)。还有其他方法吗?@user858962:您可以在开始新游戏时重置变量。@用户为什么不在需要清除变量时清除它呢。全局变量不是一成不变的。@user858962一个玩家可以同时拥有多只手吗?如果没有,您可以安全地将其设置为全局变量,并在必要时清除/修改/更新它(新回合、玩家要求新卡、游戏结束等)。全局变量不是常量,它只是全局范围内的一个变量(在任何地方都可以访问)@mykhal--我对OOP知道的不多。。。你介意把这种方法分解一下吗?这里发生了什么?@codennija,它可以用更简单的方式编写,如果您只需要一个hand
,您可以代替指针
使用函数指针(){this.x=…;this.y=…};hand=new hand()
并将hand={x:…,y:…}
替换为此
。为了更深入地理解js,我建议使用以下线程:@mykhal——您的方法非常有用。我对第一个答案进行了检查,因为我对OOP的知识充其量只是初步的。我不得不采用程序性的方法。谢谢你。hand
- 或者在