function showConfirm(reArray) {

    var theHTML = '';
    var optionArray = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6", "Option 7"];
    var myButtons = {};
    var j = 1;

    for(var i = 0; i < reArray.length; i++){

                theHTML  +='<div style="text-align:center">'
                         + '<span>'+j+'.</span>&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+reArray[i].RoadNo+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+compass_image(reArray[i].Bearing)+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '</div><br/>'

                j++;
        }

    for(i = 0; i < reArray.length; i++){

    ERROR HERE -----> var placeFunction = function(reArray[i]){

                                plotRoadInfo(reArray[i]);
                                $(this).dialog("close");
                            };

                            myButtons[optionArray[i]] = placeFunction;
    }

    $( "#dialog-modal" ).dialog({
      height: 300,
      modal: true,
      buttons: myButtons

    });

    $('#multipleRE').append(theHTML);
}


因此,该函数将传递一个对象数组(reArray),然后为jQuery对话框创建一个按钮数组(myButtons)。我正在尝试将reArray [i]传递给每个按钮将要使用的函数,该函数将执行plotRoadInfo(reArray [i]);。

我不断收到“意外令牌[”,但我不知道为什么要为我的生命而死。

最佳答案

您无需在JavaScript中指定参数的类型,只需使用名称,然后将其用作函数中的数组即可。

var placeFunction = function(reArray){
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};


我不认为您甚至需要指定它,因为您将其称为内部函数可以访问的数组。

var placeFunction = function() {
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};


正如Pointy指出的那样,这会遇到共享i变量的问题,因此每个函数都将引用reArray[reArray.length],因为循环将在i === reArray.length时完成。解决此问题的常用方法是调用一个接受i作为参数的函数,该函数将返回一个函数。

var placeFunction = (function (item) {
    return function() {
        plotRoadInfo(item);
        $(this).dialog("close");
    };
}(reArray[i]));


阅读有关闭包的内容,以更深入地了解其工作原理。 Here is another example这种情况的发生。

09-11 19:11