使用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。