见这个例子:
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;
我不明白内部功能是做什么的!
答案 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附加结果。
注意:我不清楚你的代码输出,所以我试着用另一个代码的帮助告诉你这些步骤。