在 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 代码可以更具可读性如果回调定义在回调它们的函数范围之外,则很容易维护。同样,这是我使用的一个人为示例,希望能简单地证明我的问题的要点。
最佳答案
是的,根据定义,您假设它是闭包是正确的。
听起来你很了解你的东西,但是here is a good, extensive article on javascript closures .
关于javascript - 根据它们的构造方式,回调也可以定义为闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457549/