例如,这是我们的代码:
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?
};
}
}
答案 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,以使其同步。