2012-11-04 71 views
3

好吧,我很難過,主要是因爲我沒有足夠的使用javascript。我知道這是一個數組指針的問題(我必須複製函數中的數組...),但不知道如何解決它。我可以爲你解釋爲什麼我的Javascript版本不起作用以及Python版本有什麼解釋嗎?它應該顛倒一個數組(我知道有一個內置的),但我的問題是:Javascript中的數組如何處理與Python中的不同?Javascript神祕:函數中的變量

Javascript (does not work): 

function reverseit(x) { 

    if (x.length == 0) { return ""}; 
    found = x.pop(); 
    found2 = reverseit(x); 
    return found + " " + found2 ; 

}; 

var out = reverseit(["the", "big", "dog"]); 

// out == "the the the" 

==========================

Python (works): 

def reverseit(x): 
    if x == []: 
     return "" 
    found = x.pop() 
    found2 = reverseit(x) 
    return found + " " + found2 

out = reverseit(["the", "big", "dog"]); 

// out == "dog big the"  

回答

8

它應該是...

var found = x.pop(); 
    var found2 = reverseit(x); 

沒有對這些變量進行本地化,您會將它們聲明爲全局變量 - 每調用一次reverseit就重寫它們的值。順便說一下,如果開發人員的瀏覽器支持(我認爲它應該是這樣),則可以通過'use strict';指令(MDN)來防止這些錯誤。

很明顯,代碼在Python中工作,因爲foundfound2都是本地。

但看看JS人生的光明面:你可以只寫一個函數是這樣的:

function reverseit(x) { 
    return x.length 
     ? x.pop() + " " + reverseit(x) 
     : ""; 
}; 
console.log(reverseit(['the', 'big', 'dog'])); 

...,而完全不聲明任何局部變量。

+0

是;謝謝!這解釋了很多! 它顯示它與數組無關 - 我的錯誤在那裏。 看起來有點奇怪,一個函數內部應該是全局的......但是使用適當的語法檢查器,我想這可能會被標記出來,以便像我這樣的新手不會被絆倒。 感謝您的快速響應。 – wgw