2011-08-10 54 views
0

這是我的代碼:如何使用局部變量等功能

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

    return deck; 
}; 

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

通過shuffle()這樣回到甲板上,我可以在Placemat()使用它?如果不是,我該怎麼做?

+1

我不知道那個用戶名bro。 – 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,但它始終是一個包含單個項目的數組。

如果你想有一個變量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

0

你應該看看Javascript Variable Scope問題。瞭解你的範圍。

基本上,由於deck是在匿名函數裏面聲明的,所以創建var shuffle是匿名函數以外不可用的。看到j​​Andy的回答是解決這個問題並且真正解決你的問題的好方法。

-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一個全局變量。感謝大家的幫助。