高級之路篇二十一:全面解析js一等公民function

初識function:

函數是由事件驅動的或者當它被調用時執行的可重複使用的代碼塊。

 

1、具名函數

var fun = function(){....}

  此種方式變量會提升,函數體留原地。

function fun(){....}

  此種方式變量函數體都會提升至最頂端,位於變量聲明提前之前。

 

2、匿名函數

setTimeout(function(){....}, 1000)

  缺點:

  • 追蹤棧中沒函數名,調試困難
  • 如果需要引用自身,只能用arguments.callee(ES5嚴格模式禁用)
  • 降低了函數可讀性、可理解性

 

3、立即執行函數

立即執行函數表達式用法:

//第一種
(function(){}()); 

//第二種
(function(){})();

 

4、頭等函數 、高階函數

函數接收函數作爲參數,並返回一個函數,例如:

 

5、一元函數

只接收一個參數的函數

 

6、偏函數

創造一個新函數,讓現有的一些參數值固定。比如bind實現偏函數:

function fun(a, b){
    return a + b;
}

var test = fun.bind(null, 1);
test(2); // 3

 

 

6、柯里化函數

將一個多個參數的函數轉換爲幾個一元函數序列化的過程。例如:

//多個參數函數
function add(a, b){
    return a + b;
}

//柯里化
function add(a){
    return function(b){
        return a + b;
    }
}

 

7、純函數

返回值由其參數決定,沒有任何副作用的函數。

 

8、箭頭函數

  • 沒有this,arguments
  • 不能與new一起使用,不能通過bind改變函數體this指向
  • 寫法更簡潔
  • 性能更優
  • 箭頭函數全是匿名函數

 

9、生成器

  • function和函數名之間有一個*號
  • 函數體內部使用了yield表達式
  • yieldreturn一起使用的話,return後面的yield無效
  • 沒有return,最後結果將是undefined

 

10、Function構造函數

  • 由此種方式生成的函數,運行時,它們只能訪問自己的本地變量和全局變量,不能訪問Function構造器被調用生成的上下文的作用域。這和使用帶有函數表達式代碼的 eval 不同。
  • 想要避免閉包,請考慮用它。
  • 使用Function構造器生成的Function對象是在函數創建時解析的。這比你使用函數聲明或者函數表達式(function)並在你的代碼中調用更爲低效,因爲使用後者創建的函數是跟其他代碼一起解析的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章