0

我正在尝试制作一个获取两个参数并根据它所在的步骤执行不同操作的函数。

所以这就像一个有四个步骤的简短任务。

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 我该如何解决它?

4

3 回答 3

0

问题是您将 stp 的值作为参数传递给函数。然后它对其本地副本而不是全局变量进行操作。

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

function myMission(str) { ...

myMission(str);
于 2013-03-02T16:51:22.780 回答
0

为什么要为全局变量var stp=1;和函数参数使用相同的名称会使自己复杂化function myMission(stp,str)?您正在编辑的变量是函数范围的局部变量,全局变量根本不受影响。

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

function myMission(str) { ... }
于 2013-03-02T16:53:36.693 回答
0

当您在具有相同名称的参数的函数内执行 stp+=1 时,您不再使用全局 var,但您正在处理实际上是原始 var 副本的参数,因此您正在处理完全不同的东西。

解决方案可以是更改函数的参数名称:

function myMission(stp_another_name,str) {
...

无论如何,如果你想处理全局变量,你可以省略将它作为参数传递给函数

function myMission(str) {
...

...
myMission(str);

当然根据您的代码的目的

于 2013-03-02T16:56:06.880 回答