Edit: I have removed the original code and replaced it with generalized code that anyone can run themselves to reproduce my problem:
var StripeCheckout = {
configure: function(obj){
obj.token();
}
};
StripeCheckout.configure({
token: function(token) {
var request = new XMLHttpRequest();
request.open('POST', 'http://localhost:3000/process-order');
request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
request.onreadystatechange = function() {
debugger; // right here is the problem
};
request.send();
}
});
For me, inside that anonymous function where the debugger
statement is, request
is mysteriously not defined and attempting to access it is a ReferenceError
. That really mystifies me.
This is the weird part. If I create a throwaway variable defined at the top level, and set throwaway = request;
right after creating the request
object, then inside the onreadystatechange
handler throwaway
is defined and everything is okay, even though request
is not defined.
I just tested it, and I can also access it as this
at the point of the debugger statement, as expected. What gives? Why is request
not defined?