2016-05-08 79 views
0

我想在函數外部的函數內記錄一些變量,但在js中函數中的變量被作用於特定函數而不是全局函數,因此我無法真正使用這些變量。在javascript函數中記錄輸出或分配的變量

正如你可以在下面的代碼snipplet中看到的,我有一個函數和該函數的回調函數,並且我正在嘗試登錄的是代碼底部的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

相關問題