将变量引入onreadystatechange

时间:2012-09-19 19:57:44

标签: javascript

例如,这是我们的代码:

function blabla(A,B) {

    // Something

    httpReq.onreadystatechange = function(A,B) {
        if (httpReq.readyState == 4) {
            // console.log(A,B) says 'undefined'
            // How can I use the values of A and B here?
        };
    }
}

4 个答案:

答案 0 :(得分:2)

只需使用A和B.关闭支持(JavaScript的基本功能)将负责处理它。 见How do JavaScript closures work?

在你的情况下,

function blabla(A,B) {

    // Something

    httpReq.onreadystatechange = function(paramA, paramB) {
        if (httpReq.readyState == 4) {
            // console.log(A,B) prints A and B arguments of blabla
            // console.log(paramA, paramB) prints actual parameters
        };
    }
}

答案 1 :(得分:2)

你只需使用它们。你的问题是影子。内部函数参数覆盖了外部函数,因为它们具有相同的名称。

通常,任何局部变量都可用,对于在同一范围内声明的任何函数都没有棘手。这意味着您只需使用它们,只要您不使用同名的新局部变量对它们进行遮蔽。

function blabla(a, b) {

    // Something

    httpReq.onreadystatechange = function(c, d) {
        // logs undefined, because no arguments are actually passed in
        // so the variables are undefined.
        console.log(c, d);

        // log arguments passed to blabla() because it picks up the reference
        // the parent scope.
        console.log(a, b);
    }
}

blabla('Hi', 'There'); // should log "Hi", "There"

只要您为每个函数的参数使用唯一的变量名称,这才有效。

答案 2 :(得分:1)

您可以将A和B临时存储在变量中。

var data = {};
function blabla(A,B) {
    data.A = A;
    data.B = B;

    httpReq.onreadystatechange = function() {
        // How can I lead the values of A and B into this?
        console.log(data.A, data.B)
    }
}

答案 3 :(得分:0)

您需要在发送请求之后放置onreadystate更改功能,并将open函数的第三个参数设置为false,以使其同步。