2017-10-12 2 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' –

+0

を呼び出した結果を返し、次の行がために' 'undefined' –

+3

を言ったので、' ... A'などを返します(var i = 0; i <10; i ++)はX()を10回呼び出す以外は意味があります。 –

答えて

0

、あなたがpickFunc()Xの結果を代入している次のコードを試してみてください。

pickFunc()の代わりにX()を呼び出すことができるように、関数のエイリアスを作成するようです。あなたのコードに最小限の変更でこれを行うにはあなたがその行を変更します。これは、それはそう残業あなたがX()を呼び出すようになります

X = pickFunc; 

、それはpickFunc()を再評価します。

+1

???パラメータを指定しないで 'X = pickFunc'を実行すれば十分です。もちろん、OPは意味をなさない。 – PHPglue

+0

まさに私が探していたもの、ありがとう! –

0

現在、あなたが彼らにの参照を返す必要があるときpickFuncの内部機能ABCを呼び出した結果を戻ってきています。あなたが最後にX = pickFunc();を行うと

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を代入することができます。このようにすると、関数が有効になります –

関連する問題