0

2 つのパラメーターを取得し、どのステップにあるかに応じて異なる処理を行う関数を作成しようとしています。

つまり、4 つのステップがある短いクエストのようなものです。

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);
  });
});

問題は、どうすれstp1 修正できるかということです。

4

3 に答える 3

0

関数内で同じ名前のパラメーターを使用して stp+=1 を実行すると、グローバル var で作業することはなくなりますが、実際には元の var のコピーであるパラメーターで作業することになるため、全く別物。

解決策は、関数のパラメーターの名前を変更することです。

function myMission(stp_another_name,str) {
...

とにかく、グローバル変数で作業したい場合は、パラメーターとして関数に渡すことを省略できます

function myMission(str) {
...

...
myMission(str);

もちろん、コードの目的に応じて

于 2013-03-02T16:56:06.880 に答える
0

var stp=1;グローバル変数と関数の引数に同じ名前を使用すると、なぜ複雑になるのfunction myMission(stp,str)でしょうか? 編集している変数は関数スコープのローカル変数であり、グローバル変数はまったく影響を受けていません。

私がよく理解していれば、引数は必要なく、グローバル変数のみを使用する必要があります。

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

問題は、stp の値をパラメーターとして関数に渡していることです。次に、グローバル変数ではなく、そのローカル コピーを操作します。

これを修正するには、関数定義とその呼び出しから stp パラメーターを削除します。

function myMission(str) { ...

myMission(str);
于 2013-03-02T16:51:22.780 に答える