在javascript函数中记录输出或分配的变量

时间:2016-05-08 22:58:17

标签: javascript function variables

我正在尝试在函数外部的函数中记录一些变量,但是在函数中js中的变量是使用该特定函数确定的,而不是全局变量,所以我不能真正使用这些变量。

正如您在下面的代码片段中所看到的,我有一个函数和该函数的回调,我正在尝试记录的是在代码底部的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)));
};

2 个答案:

答案 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

答案 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.

谢谢。