2013-11-10 4 views
-1

Как это работает? function(){...}(); Я не могу понять, что происходит. Я думаю, что это javascript не node.js головоломка. Но я не могу найти решение.Анонимная функция + javaScript

fs.readdir(filesDir, function(err, files) { 
if (err) throw err; 
for (var index in files) { 
    **var task = (function(file) {** 
     return function() { 
      fs.readFile(file, function(err, text) { 
       if (err) throw err; 
       countWordsInText(text); 
       checkIfComplete(); 
      }); 
     } 
    **})(filesDir + '/' + files[index]);** 
    tasks.push(task); 
} 
for (var task in tasks) { 
    tasks[task](); 
+4

Он определяет и сразу же вызывает функцию. Скобки вокруг него позволяют это путем преобразования строки в оператор (вместо объявления). Это было задано раньше, но я не могу найти прямую ссылку прямо сейчас. – Dave

+0

Если вам интересно, причиной этого кода является сохранение локального файла в текущей итерации. Без него файл будет ограничен слишком широко, и все обратные вызовы будут видеть последний файл, а не свой собственный. – Dave

ответ

1

Этот код является встроенным выполнением функции js. Каждая JS-функция может быть определена и выполняться инлайн:

var result = (function(params) { /* some functionality */ })(params); 

в вашем случае:

var task = (function(file) { 
      return function() { 
       fs.readFile(file, function(err, text) { 
        if (err) throw err; 
        countWordsInText(text); 
        checkIfComplete(); 
       }); 
      } 
     })(filesDir + '/' + files[index]); 

также можно записать как:

// define the funktion 
var task = function(file) { 
       return function() { 
        fs.readFile(file, function(err, text) { 
         if (err) throw err; 
         countWordsInText(text); 
         checkIfComplete(); 
        }); 
       } 
      }; 

// execute the function with parameter 
var result = task(filesDir + '/' + files[index]); 
Смежные вопросы