Node.js 高階函數(shù)

2018-01-09 08:25 更新

立即執(zhí)行函數(shù)

我們可以立即執(zhí)行一個(gè)函數(shù),在定義它之后。只需將函數(shù)包裹在括號(hào)()中并調(diào)用它。

(function myData() {
   console.log("myData was executed!"); 
})(); 

立即執(zhí)行的函數(shù)創(chuàng)建一個(gè)新的變量作用域。if,else或while不會(huì)在JavaScript中創(chuàng)建新的變量作用域。

var myData = 123; 
if (true) {
   var myData = 456; 
} 
console.log(myData); // 456; 

在JavaScript中創(chuàng)建新的變量作用域的唯一推薦方法是使用函數(shù)。下面的代碼顯示了如何使用立即執(zhí)行的函數(shù)創(chuàng)建一個(gè)新的變量范圍。

var myData = 123; 
if (true) { 
    (function () { // create a new scope 
        var myData = 456;
     })(); 
} 
console.log(myData); // 123; 

匿名函數(shù)

沒有名稱的函數(shù)稱為匿名函數(shù)。在JavaScript中,可以將函數(shù)分配給變量。如果你要使用一個(gè)函數(shù)作為一個(gè)變量,你不需要命名該函數(shù)。

下面的代碼顯示了兩個(gè)定義函數(shù)內(nèi)聯(lián)的方法。這兩種方法都是等效的。

var foo1 = function namedFunction() {
   console.log("foo1"); 
} /*o2fo.com*/
foo1(); // foo1 

var foo2 = function () { // no function name i.e. anonymous function
   console.log("foo2"); 
} 
foo2(); // foo2 

如果一個(gè)函數(shù)的處理方式與語言中任何其他變量的處理方式相同,那這種編程語言被稱為具有一流功能。而JavaScript具有一流的功能。

高階函數(shù)

由于JavaScript允許我們?yōu)樽兞抠x值函數(shù),我們可以將函數(shù)傳遞給其他函數(shù)。將函數(shù)作為參數(shù)的函數(shù)稱為高階函數(shù)。高階函數(shù)的一個(gè)非常常見的例子是setTimeout。

以下代碼顯示如何使用setTimeout函數(shù)。

setTimeout(function () {
    console.log("2000 milliseconds have passed since this demo started"); 
}, 2000); 

如果在Node.js中運(yùn)行此應(yīng)用程序,你會(huì)在兩秒后看到console.log消息然后應(yīng)用程序?qū)⑼顺?。我們使用一個(gè)匿名函數(shù)作為setTimeout的第一個(gè)參數(shù)。這使得setTimeout是一個(gè)高階函數(shù)。我們可以創(chuàng)建一個(gè)函數(shù)并傳入。

function foo() {
    console.log("2000 milliseconds have passed since this demo started"); 
}
setTimeout(foo, 2000); 

Closure

如果在另一個(gè)函數(shù)內(nèi)定義了一個(gè)函數(shù),內(nèi)部函數(shù)可以訪問在外部函數(shù)中聲明的變量。外部函數(shù)中的變量已經(jīng)被內(nèi)部函數(shù)關(guān)閉。這個(gè)概念本身是足夠簡單和直觀的。

function outerFunction(arg) { 
    var variableInOuterFunction = arg;
    function myValue() { 
       console.log(variableInOuterFunction);
    }
    myValue(); 
} 
outerFunction("hello closure!"); // logs hello closure! 

內(nèi)部函數(shù)可以從外部范圍訪問變量,即使在外部函數(shù)已返回時(shí)。因?yàn)樽兞咳匀辉趦?nèi)部函數(shù)中綁定,而不依賴于外部函數(shù)。

function outerFunction(arg) {
    var variableInOuterFunction = arg;
    return function () {
       console.log(variableInOuterFunction); 
    } 
} 
var innerFunction = outerFunction("hello closure!"); 
innerFunction();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)