2017-10-12 114 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赋给一个函数,只要这样做,它就会起作用 –