2016-05-08 5 views
0

関数内の関数内でいくつかの変数をログに記録しようとしていますが、関数内の変数jsはその関数ではなくグローバルであるため、それらの変数。javacript関数内の出力または割り当てられた変数をログに記録する

以下のコードスニペットでわかるように、私はその関数の関数とコールバックを持っています。私が記録しようとしているのは、コードの最後のif文の中です。 console.logの結果は定義されていません。

関数内の変数を外部化する簡単な方法はありますか?

ありがとうございました。

var xml; 
var nodelist; 
var callLDAP = function (username, callback) { 
    var LDAPOptions = { 
     "LDAPOptions" : { 
      "filter" : { 
       "$" : filter 
      } 
     } 
    } 
    var options = {}; 
    options.location = "callLDAP.xsl"; 
    var xml = converter.toXML('badgerfish', LDAPOptions); 
    options.xmldom = XML.parse(XML.stringify(xml)); 
    transform.xslt(options, function (err, nodelist, abortinfo) { 
     if (err) { 
      session.out.write(err); 
     } else { 
      callback(err, converter.toJSON('badgerfish', nodelist.item(0))); 
     } 
    }); 
    return xml; 
}; 

var node; 
var ldap_response = callLDAP(username, function (error, node) { 
     if (error) { 
      console.log("Error @ldapResponse"); 
     } else { 
      return node; 
     } 
    } 
); 

if (user == 'debugMode'){ 
    console.debug("***NODE: " + node); 
    console.debug("***nodelist: " + XML.stringify(nodelist.item(0))); 
}; 

答えて

0

最も明白な方法は、変数が親スコープを共有するように関数の外部に宣言することです。

function foo() { 
    var bar = 1; 
} 

foo(); 
console.log(bar); // error - bar is not defined 

だけではなく、次の操作を行います:

var bar; 
function foo() { 
    bar = 1; 
} 

foo(); 
console.log(bar); // 1 
0

おかげデイモンたとえばあなたはこのコードを持っていると言います。 これは答えの一部です...私はもともとこれを行っていましたが、継続的に定義されていませんでした。なぜなら、コールバックではなく関数内で宣言していたため、コールバックではなく関数内で変数を定義していたからです。それ自体は、コールバックの結果を取得しません。 さらに、誤ってグローバル変数を使用するのではなく別の変数を作成する、関数値内に別の 'var'構文を宣言しました。

function callLDAP (username, callback) { 
    var LDAPOptions = { 
     "LDAPOptions" : { 
      "filter" : { 
       "$" : filter 
      } 
     } 
    } 
    var options = {}; 
    options.location = "callLDAP.xsl"; 
    var xml = converter.toXML('badgerfish', LDAPOptions); 
    options.xmldom = XML.parse(XML.stringify(xml)); 
    transform.xslt(options, function (err, nodelist, abortinfo) { 
     if (err) { 
      session.out.write(err); 
     } else { 
      callback(err, converter.toJSON('badgerfish', nodelist.item(0))); 
     } 
    }); 
}; 

var node_results; 
callLDAP(username, function (error, node) { 
     if (error) { 
      console.log("Error @ldapResponse"); 
     } else { 
      node_results = node; 
     } 
    } 
); 

if (user == 'debugMode'){ 
    console.debug("***NODE_Results: " + node_results); 
}; //should output the results from the function call. 

ありがとうございます。

+0

うれしいことに、より多くのコードを簡単に作成することができます。 – Damon

関連する問題