DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JavaScript遞歸操作實例淺析
JavaScript遞歸操作實例淺析
編輯:關於JavaScript     

本文實例分析了JavaScript遞歸操作。分享給大家供大家參考,具體如下:

問題

一個簡單的遞歸,求n的階乘:

function factorial(n){
  if (n<=1)
  {
    return 1;
  }else{
    return factorial(n-1)*n;
  }
}

如果像下面這樣使用它,則會出錯:

var fcopy = factorial;
factorial = null;
alert(fcopy(3));

因為fcopy指向的函數實體調用了factorial,而factorial已經被釋放。

解決的辦法

使用arguments.callee

執行流進入函數時會創建函數的運行環境(作用域鏈等),包括 arguments 這個特殊對象,arguments對象有個屬性指向函數本身:arguments.callee 。

function factorial(n){
  if (n<=1)
  {
    return 1;
  }else{
    return arguments.callee(n-1)*n;
  }
}

不過callee在嚴格模式下不可用。

使用函數表達式

var factorial = (function f(n){
  if (n<=1)
  {
    return 1;
  }else{
    return f(n-1)*n;
  }
})

這並非使用了什麼新的技術,只是在原來概念上的一種應用,在定義 factorial 時,直接創建一個函數,再將此函數的引用賦值給factorial。

更多關於JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript遍歷算法與技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》及《JavaScript錯誤與調試技巧總結》

希望本文所述對大家JavaScript程序設計有所幫助。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved