閉包與遞歸函數的區別


 

# 閉包與遞歸函數的區別


閉包函數

閉包是指有權訪問另一個函數作用域中的變量的函數。這個是官方的解釋。閉包其實也是函數,可是不同於其他的函數。它是在函數里面嵌套一個函數的函數,其內部函數引用外部函數的變量、參數。

下面舉個例子來理解:

function outFunction(objName){
  return function( object 1, object 2){
   var value1 = object1[objName];
  var value2 = object2[objName];
  if( value 1 < value 2){
  return - 1;
  } else if( value 1 > value 2){
    return 1;
  } else{
  return 0;
    }
  };
}
var compare = outFunction( "name");
var result = compare({name: "Nicholas"},{name: "Greg"});

var value1 = object1[objName];這行代碼訪問了外部函數中的變量objName。內部函數可以訪問外部函數的變量是作用域鏈的問題。

總結一下,形成閉包需要滿足:1)在函數的內部嵌套一個函數;2)內部函數引用了外部函數的變量、參數。


遞歸函數

遞歸函數是在一個函數通過函數名字調用自身的函數。
例如:

function factorial( num){
   if ( num <= 1) {
   return 1;
  } else{
    return num * factorial(num - 1);
    }
  }
console. log( factorial( 4)); // 24

 

閉包與遞歸的區別:
相同點:1)都是函數
    2)在函數的內部都會調用函數

不同點: 1)閉包函數調用的內部函數需要引用外部函數的變量、參數;遞歸函數是自己調用自己,不需要引用變量、參數
     2)閉包函數調用一次結束調用,遞歸函數在滿足遞歸條件時需要多次調用
     3)閉包函數會比其他函數更占內存


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM