2016-05-10 11 views
0

関数が次のような関数を参照するとき、javascriptで何が呼び出されているのだろうかと思います。それ自体を参照するjavascript関数

この機能は、ハードドライブ上のフォルダを再帰的にナビゲートするために使用されています。 v変数は元のファイルであり、 "Folder"オブジェクトは単にフォルダ/ファイルのリスト/配列です。

私は、元のv変数をどのように保持するのだろうと思いますか?関数が(それ自身で)実行されるたびに変更されるので、関数を開始した元の変数にはアクセスできません。

function recursefolders(v){ 
    var f = new Folder(v); 
    while (!f.end) { 
     if (f.filetype == "fold") { 
      var foldername; 
      foldername = f.pathname + f.filename 
      recursefolders(foldername); 
alert('This is the original variable' + v); 

     } 
     f.next(); 
    } 
    f.close(); 
} 
+1

ような何か。再帰的な方法ではこれを行うのが普通です。 –

+0

recurseFoldersはどこから呼び出されていますか?クローズで元のvにアクセスできるかもしれません。 – Phil

答えて

1

あなたはvをキャプチャするためにクロージャを使用することができます。

function recursefolders(v) { 
    var capturedV = v; 

    function folderTraversal(v) { 
    var f = new Folder(v); 
    while (!f.end) { 
     if (f.filetype == "fold") { 
     var foldername; 
     foldername = f.pathname + f.filename 
     folderTraversal(foldername); 
     alert('This is the original variable' + capturedV); 
     } 
     f.next(); 
    } 
    f.close(); 
    } 

    folderTraversal(v); 
} 
0

は解決策1: あなたがoriginal_vとV 2つのパラメータに送信することができますoriginal_vが変更とV変化しない場合。再帰的な方法では、これを行うのはかなり普通です。

解決方法2: ラッパーのClojure /機能を確認します..あなたはoriginal_vとV 2つのパラメータに送信することができますoriginal_vが変更とV変化しない場合、この

function recursefolders(v){ 
    var original_v = v; 
    recurseSubfolders(original_v); 
    function recurseSubfolders(v){ 
     while (!f.end) { 
      if (f.filetype == "fold") { 
       var foldername; 
       foldername = f.pathname + f.filename 
       recurseSubfolders(foldername); 
       alert('This is the original variable' + original_v); 
      } 

      f.next(); 
     } 

     f.close();  
    } 
} 
関連する問題