【问题标题】:Anonymous Function + javaScript [duplicate]匿名函数+ javaScript [重复]
【发布时间】:2013-11-22 04:41:54
【问题描述】:

它是如何工作的? function(){...}();我不明白发生了什么。我认为这是 javascript 而不是 node.js 拼图。但我找不到解决方案。

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]();

【问题讨论】:

  • 它定义并立即调用该函数。它周围的括号通过将行转换为语句(而不是声明)来实现这一点。以前有人问过这个问题,但我现在找不到直接链接。
  • 如果你有兴趣,这段代码的原因是为了让文件保持在当前迭代的本地。没有它,文件的范围会太广,所有回调都会看到最后一个文件,而不是他们自己的。

标签: javascript


【解决方案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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 2013-12-18
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多