2013-03-02 77 views
0

我试图让一个函数获得两个参数,并根据它所在的步骤执行不同的操作。JavaScript中的全局变量回到它的第一个值

所以它就像一个四步骤的短暂任务。

var stp=1; 
var vocabulary= new Array(); 
vocabulary['greatings']= ['привет','здорово','здравствуй']; 
vocabulary['grQuestions']= ['как дела','что нового','как здоровье','как поживаешь']; 
vocabulary['qrAnswers']= ['нормально как сам','спасибо хорошо','потихоньку','отлично']; 

function myMission(stp,str) { 
    switch (stp) { 
    case 1: 
    { 
     if (jQuery.inArray(str, vocabulary['greatings'])!==-1) { 
     stp+=1; 
     $('.stp').html(stp); 
     $('.answer').html('Привет!'); 
     } else { 
     $('.stp').html(stp); 
     $('.answer').html('Не понимаю'); 
     } 
    } 
    break; 
    case 2: 
    alert("23"); 
    break; 
    case 3: 
    alert("24"); 
    break; 
} 
} 
$(document).ready(function() { 
    $('#checker').click(function() { 
    var str = $('.yourVoice').val(); 
    myMission(stp,str); 
    }); 
}); 

的问题是,stp总是回1 如何解决呢?

+0

看看jsfiddle.net并设置一个例子 – mplungjan 2013-03-02 16:50:48

回答

0

问题是,您将stp的值作为参数传递给函数。然后它在本地副本上运行,而不是全局变量。

要修复它,请从函数定义中删除stp参数以及对其的任何调用。

function myMission(str) { ... 

myMission(str); 
0

为什么你使用相同的名称为一个全局变量var stp=1;和函数参数function myMission(stp,str)复杂化自己呢?您正在编辑的变量是函数作用域的局部变量,全局变量完全不受影响。

如果我理解的很好,你不需要参数,只应该使用全局变量。

function myMission(str) { ... } 
+0

是的!谢谢!我刚看到它! – 2013-03-07 20:47:56

0

当你做STP + = 1的函数内与具有相同名称的参数,你是不是与全局变量工作了,但你的,实际上是原来的VAR副本的参数工作,所以你正在做一个完全不同的事情。

该解决方案可以改变函数的参数的名称:

function myMission(stp_another_name,str) { 
... 

无论如何,如果你想在全局变量工作,你可以省略通过它充当参数

function myMission(str) { 
... 

... 
myMission(str); 

当然根据你的代码的目的