如何在其他函数中使用局部变量

时间:2011-08-10 20:26:13

标签: javascript

这是我的代码:

var shuffle = function(x) {
    var deck = [];
    deck.push(x);

    return deck;
};

var Placemat = function() {
    var card1 = deck.shift();
    var card2 = deck.shift();
}

通过像这样返回shuffle()中的套牌,我可以在Placemat()中使用它吗?如果没有,我该怎么办?

5 个答案:

答案 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)

您可以使用shufflePlacemat的返回值,但它始终是一个包含单个项目的数组。

如果您想要包含多个项目的变量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作为全局变量。感谢大家的帮助。