使用javascript中的参数附加函数
我有这个功能:使用javascript中的参数附加函数,javascript,Javascript,我有这个功能: function addButtonLookup() { var element = document.getElementById("btnToolBar"); var index; for (var i = 0; i < lookupArray.length; i++) { index = i; var btn = document.createElement('input'); btn.ty
function addButtonLookup() {
var element = document.getElementById("btnToolBar");
var index;
for (var i = 0; i < lookupArray.length; i++) {
index = i;
var btn = document.createElement('input');
btn.type = 'button';
btn.value = '' + lookupArray[i];
btn.name = 'btnLookup' + i;
btn.id = i;
btn.className = 'CommonButtonStyle';
element.appendChild(btn);
btn.onclick = function() {
debugger;
tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]);
};
}
}
函数addButtonLookup(){
var元素=document.getElementById(“btnToolBar”);
var指数;
对于(var i=0;i
ON按钮单击未定义的i,而不是:
btn.onclick = function() {
debugger;
tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]);
};
试试这个:
btn.onclick = (function(i) {
return function() {
debugger;
tblExcpression.WriteMathElement(lookupArray[i], lookupArray[i]);
}
})(i);
第一个版本的问题是i变量是从当前范围复制的。然而,i变量在当前范围内变化(它是for循环的一部分),这就是为什么会出现这种奇怪的行为
通过将i变量作为参数传递给新函数(如第二个示例),将复制当前i变量
您应该看看闭包在JavaScript中是如何工作的。典型错误。见例5。