2015-01-06 4 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 с помощью callback:

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

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

По-моему, это самый простой ответ. Не говоря уже о том, что это общий метод, поэтому будущие программисты поймут, что вы пытаетесь сделать. – slebetman

+0

Это умно. Я продолжаю забывать, что вы можете вернуть функцию в 'JavaScript'. – shriek

Смежные вопросы