在 JavaScript 中,我知道闭包可以定义为嵌套函数,该函数可以访问其包含函数的变量。例如:
function outerFunction(x, y) {
function innerFunction() {
return x + y + 10;
}
return innerFunction;
}
onreadystatechange
现在,下面的代码正在为请求对象的属性建立一个回调;但是,我想知道根据定义,这是否也被认为是一个闭包:
/* This is a contrived example, I know.
* Bear with me - it demonstrates the point I'm trying to convey. */
function submitHandler() {
var oRequest = createRequest(); // assume I'm getting an instance of the xhr
var sUsername = 'Tom'; // assume this is needed for work in the handler
var This = this;
oRequest.onreadystatechange = function() {
This.handleResponse(oRequest, sUsername)
}
}
function handleResponse(oResponse, sUsername) {
if(oResponse.readyState === 4 && oResponse.status === 200) {
// do work with the username
} else {
// we're not done yet...
}
}
我意识到该handleResponse
函数也可以在 的上下文中编写为匿名函数submitHandler
,但我发现如果在函数回调范围之外定义回调,更复杂的 Ajax 代码可以更易读和更容易维护。同样,这是一个人为的例子,我正在使用它来简单地展示我的问题的重点。