2015-01-06 40 views
0

在節點假設我有以下代碼: -傳遞函數的範圍,回調函數

function readDirectory(callback){ 
    fs.readdir('./', filterList); 
} 

function filterList(err,data){ 
    //callback is undefined 
    if(err) callback(err); 
    callback(); 
} 

readDirectory(function(){ 
    console.log("Hi"); 
} 

但接下來的作品,如果我定義了readDirectory本身,因爲它是在同一範圍內的功能: -

function readDirectory(callback){ 
    fs.readdir('./', function(err,data){ 
     if(err) callback(err); 
     callback(); 
    }); 
} 

readDirectory(function(){ 
    console.log("Hi"); 
} 

所以我的問題是,是否有辦法的readDirectory範圍傳遞給已定義之外的回調函數?

回答

2

所以我的問題是,有沒有辦法將readDirectory的作用域傳遞給外部定義的回調函數?

不,JavaScript具有詞彙範圍。不過,你可以讓filterList接受回調:

function readDirectory(callback){ 
    fs.readdir('./', filterList(callback)); 
} 

function filterList(callback) { 
    return function(err,data){ 
    if(err) callback(err); 
    callback(); 
    }; 
} 
+0

在我看來這是最直接的答案。更不用說這是一種常用的技術,所以未來的程序員會明白你想要做什麼。 – slebetman

+0

這很聰明。我一直忘記你可以在'JavaScript'中返回函數。 – shriek