3

OK、主にjavascriptを十分に使用していないため、困惑しています。これが配列ポインタの問題であることは知っていますが(関数で配列をコピーする必要があります...)、修正方法がわかりません。私のJavascriptバージョンが機能せず、Pythonバージョンが機能しない理由を説明するためにあなたを困らせることができますか?配列を逆にすることになっていますが(組み込みがあることはわかっています)、私の質問は次のとおりです。Javascriptの配列はPythonとはどのように異なる方法で処理されますか?

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"     
4

1 に答える 1

8

そのはず...

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

reverseitこれらの変数をローカライズせずに、グローバル変数として宣言し、が呼び出されるたびに値を書き換えます。ちなみに、これらのエラーは、開発者のブラウザでサポートされている場合は、'use strict';ディレクティブ(MDN)で防ぐことができます(私の意見ではそうあるべきです)。

明らかに、コードはPythonで機能します。これはfound、 Pythonfound2 ローカルであるためです。

しかし、JSライフの明るい面を見てください。次のようにその関数を書くことができます。

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

...ローカル変数をまったく宣言せずに。

于 2012-11-04T23:43:08.627 に答える