2015-01-06 42 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