2011-08-10 11 views
0

内のローカル変数を使用するにはこれが私のコードです:私はそれがPlacemat()で使用することができ、どのように他の機能

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

    return deck; 
}; 

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

このようなshuffle()でデッキを返すことで?そうでない場合は、どうすればいいですか?

+1

私はそのユーザー名について知りません。 – Triptych

+0

@トリプティク - 十分に公正ですが、あなたは答えを知っていますか? – dopatraman

答えて

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(); 
} 

それがおそらく最も良い方法ではない場合でも。しかし、私はあなたがそこで達成したいと思っているものが何であるか分かりません。

+0

それは 'myDeck.shift()'ではないでしょうか? – Jiri

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(); 
} 
0

shuffleの戻り値をPlacematに使用できますが、常に1つの項目を含む配列になります。 、

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を使用している:あなたが複数のアイテムを含む変数deckを持つようにしたい場合は

は、deckは外側のスコープ内で宣言する必要があります。 。

0

少し前に回答したJavascript Variable Scopeの質問をチェックしてください。あなたのスコープを知っている。

基本的にはdeckが匿名関数の中で宣言されているため、var shuffleは匿名関数以外では利用できません。これを回避して実際に問題を解決するには、jAndyの答えをご覧ください。

-1

私は別の解決策が見つかりました:私はdeckグローバル変数を作成する必要はありません

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(); 
} 

この道を。みんな助けてくれてありがとう。

関連する問題