2017-02-07 9 views
0

は、この例を参照してください:関数の関数はnodejで何をしますか?

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

JavaScriptで関数を返すと、その関数の参照が返され、後で呼び出すことができます。

var result = test_func()のコードでは、resultはその機能の参照を保持します。その後、返された関数をresult(data)のように呼び出すことができます。


基本的な例:なぜならClosures

の上記の例で rsよう囲む範囲 で局所的に使用されるが、定義され

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: ");

変数

+0

ありがとう、私はそれを得たと思う。出力として関数からオブジェクトまたは文字列または...を取得する代わりに、出力として関数を取得することができます。右!? –

+0

はい、関数を返すことができます。私がすでに述べたように、我々は実際には** Reference **を返す。 – Manwal

2

この関数の関数内の概念は、JavaScriptのクロージャとして知られています。それらは自己呼び出しであり、関数のプライベート変数を持つことが可能です。 私はW3schools.comで見つけたあなたの類似したコードを表しています。

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

add(); 

add(); 

add(); 

最初に、カウンタは0に設定され、関数参照が返されます。カウンタは無名関数のスコープによって保護されており、add()関数を使用してのみ変更できます。 add()関数が3回呼び出されるため、カウンタは3に設定されます。非常に似ように

、あなたのコードは、私が推測する作業をされています。

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』と内側の関数は、次に来る関数参照を返す へ

注:私はあなたのコードの出力ではっきりしていないので、私は別のコードの助けを借りて手順を教えようとしました。

関連する問題