这是我的代码:
var shuffle = function(x) {
var deck = [];
deck.push(x);
return deck;
};
var Placemat = function() {
var card1 = deck.shift();
var card2 = deck.shift();
}
通过像这样返回shuffle()
中的套牌,我可以在Placemat()
中使用它吗?如果没有,我该怎么办?
答案 0 :(得分:2)
是的,你可以。但是,无论何时调用.shuffle()
,都会覆盖该数组,或者更确切地说,创建一个新实例。因此,如果您想保留该引用,您可以像
var shuffle = (function() {
var deck = [];
return function(x) {
deck.push(x);
return deck;
};
}());
现在.shuffle()
通过返回另一个函数来关闭deck
。所以它可能看起来像
var Placemat = function() {
var myDeck = shuffle(5);
shuffle(10);
shuffle(15);
var card1 = deck.shift();
var card2 = deck.shift();
}
即使这可能不是最好的方式。但我想我甚至不知道你想要在那里实现什么。
答案 1 :(得分:0)
您不能将它们放在参数中或函数外部。
var shuffle = function(x) {
var deck = [];
deck.push(x);
return deck;
};
var Placemat = function(deck) {
var card1 = deck.shift();
var card2 = deck.shift();
}
or
var deck = [];
var Placemat = function() {
var card1 = deck.shift();
car card2 = deck.shift();
}
答案 2 :(得分:0)
您可以使用shuffle
中Placemat
的返回值,但它始终是一个包含单个项目的数组。
如果您想要包含多个项目的变量deck
,则需要在外部范围内声明deck
:
var deck = [];
var shuffle = function(x) {
deck.push(x);
return deck;
}
var Placemat = function() {
var card1 = deck.shift();
var card2 = deck.shift();
};
这样,shuffle
函数和Placemat
都使用相同的变量deck
。
答案 3 :(得分:0)
您应该查看之前回答的Javascript Variable Scope问题。了解你的范围。
基本上,由于在匿名函数内部声明deck
以创建var shuffle
,因此在匿名函数之外是不可用的。请参阅jAndy的答案,了解解决此问题并解决问题的绝佳方法。
答案 4 :(得分:-1)
我找到了另一个解决方案:
var shuffle = function(deck,x) {
var deck = [];
deck.push(x);
return deck;
};
var Placemat = function() {
var newdeck = shuffle(deck,x)
var card1 = newdeck.shift();
var card2 = newdeck.shift();
}
这样我就不必将deck
作为全局变量。感谢大家的帮助。