我对闭包的了解远未达到高级水平,但据我了解,定义的匿名函数在引用在该函数的同一范围内定义的局部变量时,会保留该变量的值,尽管可能会影响所述变量之后。
这让我相信,在这段代码中,当每个表单字段触发它的 onblur 时警报的值应该是不同的(分别是 goHandle 和 go2Handle):
var formBean = {
"formString": "Demo",
"formFields":[
{
"name":"go",
"id":"go",
"validationString":"myTest"
},
{
"name":"go2",
"id":"go2",
"validationString":"myTest2"
}
]
};
window.onload = function()
{
for(var i=0;i<formBean.formFields.length;i++) {
var field = formBean.formFields[i];
var fieldMethod = field.name + "Handle";
document.getElementById(field.id).onblur = function() {
alert(fieldMethod);
};
}
}
<input type="text" id="go" />
<input type="text" id="go2" />
但是,发生的情况是,无论您离开哪个字段,从而触发 onblur,第二个值警报,建议闭包根本不是闭包,而只是使用变量的当前值。
您可以在这个小提琴中观察到这种行为:
有人可以解释一下我在关闭方面做错了什么或误解了吗?以及为什么这不像我期望的那样工作。非常感谢你。