函数中的函数究竟在nodejs中完成了什么?

时间:2017-02-07 07:17:53

标签: javascript node.js function

见这个例子:

var tools1 = require('../tools/tools1');
var test_func = function(arg1, arg2, arg3) {

    var local_var_1 = "lc1";
    var local_var_2 = "lc2";

    return function(data) {
    var result = tools1.doSth(local_var_1);
        result = result+local_var_2;
    }
}

exports.test_func = test_func;

我不明白内部功能是做什么的!

2 个答案:

答案 0 :(得分:2)

在javascript中返回函数时,它返回该函数的引用,稍后可以调用它。

当您执行var result = test_func()时,在您的代码中,result将保留该功能的参考。然后您可以调用返回的函数,如result(data)

一个基本的例子:



function sum(x, y) {
  var rs = x+y;
  return function(message) {
    console.log(message + rs); //rs holds its value because of clousers
  }
}

var result = sum(2, 3);
result("This is result: ");




  

在本地使用但在封闭范围内定义的变量   与上面示例中的rs一样,因为Closures

答案 1 :(得分:2)

函数内部的这个函数概念在JavaScript中称为闭包。它们是自调用的,并且可以使用函数的私有变量。 我代表的是我在W3schools.com中找到的类似代码。

var add = (function () { 
    var counter = 0;
    return function () {return counter += 1;}
})();

add();

add();

add();

最初,计数器设置为0,然后返回一个函数引用。计数器受匿名函数范围的保护,只能使用add()函数进行更改。 计数器设置为3,因为add()函数被调用三次。

以非常类似的方式,我猜你的代码正在运行:

var test_func = function(arg1, arg2, arg3) {

    var local_var_1 = "lc1";
    var local_var_2 = "lc2";

    return function(data) {
    var result = tools1.doSth(local_var_1);
        result = result+local_var_2;
    }
}

local_var_1和local_var_2设置为“lc1”和“lc2”并返回一个函数引用。 然后内部函数来到local_var_1上的tools1.doSth()并使用local_var_2附加结果。

注意:我不清楚你的代码输出,所以我试着用另一个代码的帮助告诉你这些步骤。