2013-03-02 74 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); 

當然根據你的代碼的目的