1

重複の可能性:
jslint エラー「ループ内で関数を作成しないでください。」を回避する方法</a>

公正な警告、私は非常に初心者です。私は Google マップ API v3 プロジェクト ( http://jsbin.com/ofepet/9/edit ) に取り組んでおり、JSBin に「ループ内で関数を作成しないでください」という警告があります。修正したいのですが、他の場所で入手したコードを使用しているため、何が起こっているのかを正確に理解するのに苦労しています-特に最後の7行.

要するに、関数をループから外すのに十分なほどコードを理解していません。最後から 2 行目にエラーが表示されます。

  function setMarkers(map, markers) {

    for (var i = 0; i < markers.length; i++) {
        var sites = markers[i];
        var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: sites[0],
            zIndex: sites[3],
            html: sites[4],
            icon: featureImage
        });

        var contentString = "Some content";

        google.maps.event.addListener(marker, "click", function () {
            infowindow.setContent(this.html);
            infowindow.open(map, this);
        });
    }

このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

2

警告は実際にそれが何を意味するかを正確に言っています。:-) ループがあり、forループ内でfor渡す関数を作成していますaddEventListener。これは (常にではありませんが) 頻繁にエラーになるため、フラグが立てられます。

あなたの場合、実際には無害ですが、ループ内で作成しているすべての要素に対して、複数の関数を作成するのではなく、1 つの関数を使用できるように見えます。そう:

function setMarkers(map, markers) {

    for (var i = 0; i < markers.length; i++) {
        var sites = markers[i];
        var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: sites[0],
            zIndex: sites[3],
            html: sites[4],
            icon: featureImage
        });

        var contentString = "Some content";

        google.maps.event.addListener(marker, "click", handler);
    }

    function handler() {
        infowindow.setContent(this.html);
        infowindow.open(map, this);
    }
}

これで、呼び出しごとに 1 つの関数を作成してsetMarkers再利用するだけです。

于 2012-12-06T16:48:39.760 に答える