繁体   English   中英

Javascript中的全局变量回到其第一个值

[英]Global variable in Javascript back to it's first value

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

因此,这就像是完成四个步骤的简短任务。

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

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

要修复此问题,请从函数定义及其任何调用中删除stp参数。

function myMission(str) { ...

myMission(str);

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

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

function myMission(str) { ... }

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

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

function myMission(stp_another_name,str) {
...

无论如何,如果您要使用全局变量,则可以忽略将其传递给参数

function myMission(str) {
...

...
myMission(str);

当然根据您的代码的目的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM