2017-10-12 151 views
1

我是Javascript新手,我試圖編寫一個程序,它將使用一個變量來調用函數,我將變量var X;定義爲全局變量,並在startGame()函數上初始化它。問題是如果我運行startGame()一次,然後調用X();作爲一個函數工作正常,但說我把它放在一個循環,它運行在第一次迭代,當它返回時,它說Uncaught TypeError: X is not a function。剛接觸Javascript我很困惑,我需要關於如何使用變量作爲函數的幫助。返回函數Javascript

var X, 
i=0, 
lastmove = 100;  //Randomly initialize function 

function A(){ 
    console.log('A'); 
} 

function B(){ 
    console.log('B'); 
} 

function C(){ 
    console.log('C'); 
} 

function pickFunc(){ 
    var temp = Math.floor(Math.random() * 3) + 1; 
    if(temp==lastmove) 
     temp = pickFunc() 
    else 
     lastStr = temp; 

    if(temp == 1) 
     return A(); 
    else if(temp == 2) 
     return B(); 
    else 
     return C(); 
} 

function startGame(){ 
    X = pickFunc(); 
    for(i; i<10; i++) 
     X() 
} 
+1

'返回A'等...因爲'返回A()'返回調用'A' –

+0

的結果,我只是說,它跑了一次就好的是,下一行表示'undefined' –

+3

'爲(i; i <10; i ++)'...'對於(var i = 0; i <10; i ++)'更合理 - 除了它會調用X()10次 –

回答

0

當你在做到底X = pickFunc();,你指定的pickFunc()的結果X

看來你打算別名該功能,因此您可以撥打X()來代替pickFunc()。以最小的改動你的代碼你就需要該行更改爲:

X = pickFunc; 

這將使它所以加班你叫X(),它重新評估pickFunc()

+1

???沒有參數的'X = pickFunc'應該就足夠了。當然,OP沒有意義。 – PHPglue

+0

正是我在找的東西,非常感謝! –

0

目前,當你需要一個參考被歸還給你返回調用函數ABCpickFunc內的結果。試試下面的代碼:

function pickFunc(){ 
    var temp = Math.floor(Math.random() * 3) + 1; 
    if(temp==lastmove) 
     temp = pickFunc() 
    else 
     lastStr = temp; 

    if(temp == 1) 
     return A; 
    else if(temp == 2) 
     return B; 
    else 
     return C; 
} 
0
var i=0; 
var lastmove = 100;  //Randomly initialize function 

function A(){ 
    console.log('A'); 
} 

function B(){ 
    console.log('B'); 
} 

function C(){ 
    console.log('C'); 
} 

var X = function pickFunc(){ 
    var temp = Math.floor(Math.random() * 3) + 1; 
    if(temp==lastmove) 
     temp = pickFunc() 
    else 
     lastStr = temp; 

    if(temp == 1) 
     return A(); 
    else if(temp == 2) 
     return B(); 
    else 
     return C(); 
} 

function startGame(){ 
    for(i; i<10; i++) 
     X() 
} 
+0

當你創建一個函數時,你可以將一個var賦給一個函數,只要這樣做,它就會起作用 –