當前位置:編程學習大全網 - 腳本源碼 - js遞歸函數

js遞歸函數

遞歸經常碰到的問題了。

出問題的地方是 Run(temp,path);

既然是遞歸的調用 而且這個函數本身 有 return 值 那麽 妳應該在

調用 Run(temp,path);的時候 接收他的返回值

應該寫成 value = Run(temp,path);

1. 現在妳可以設成 局部變量 var value 了。

之所以出現undefined就是因為

return value 這行代碼 就執行了 1次 也就是 第壹個執行 var test=Run(myjson,mypath);的時候

這個時候 value 變量還沒有定義出來, value是在 最後壹次執行 Run(temp,path);的時候才定義的,而需要把這個 返回出來 並接收 才有效。

2. json=json[path[0]],

這個地方 不會報錯 妳是寫錯了代碼

妳如果 把這個地方 寫成 json=json[path[0]],

那麽下面 Run(temp,path); 是不是也應該寫成 Run(json,path);呢?

這樣就不會報錯。

3. 在javascript裏 數組和 對象 都是屬於 引用類型的, 這是為了 節省內存空間。

其實道理簡單, var a = {b:1} 這個時候 a變量裏面 存儲的是 保存這個 對象的內存地址,

打個比方 這個對象是壹個寶箱 他是隱藏在內存的, a變量裏面是打開這個寶箱的鑰匙和地圖

那麽 b=a的時候 只是 復制了 鑰匙和地圖, 寶箱還是壹個, 所以這個時候 a 和b 是指同壹個對象的。

最後代碼 修改後是這樣

function Run(json,path){

if(path.length<=1){

var value=json[path[0]]; // 如果這裏換成var value=json[path[0]]結果是undefined

} else {

var temp;

json=json[path[0]]; //這裏為什麽不能用 json=json[path[0]]

path.splice(0,1);

value = Run(json,path);

//arguments.callee(temp,path);

}

return value;

}

var myjson={a:1,b:{c:{e:3},d:4}};

var mypath=['b','c','e'];

var test=Run(myjson,mypath);

alert(test);

  • 上一篇:TVB***翻拍了哪些經典劇?
  • 下一篇:香港遊費用赴港旅行團
  • copyright 2024編程學習大全網