Development Tip

JS 힌트-루프 내에서 함수를 만들지 마십시오.

yourdevel 2020. 12. 29. 08:03
반응형

JS 힌트-루프 내에서 함수를 만들지 마십시오.


JSHint의 오류 메시지를 피할 수 없습니다. 다음은 내가 사용하는 루프입니다.

for (i = 0; i < Collection.length; i += 4) {
    data.push({
        items : Collection.slice(i, i + 4).map(function(item) {
            return {
                id: item[0],
                title: item[1],
            };
        })
    });
}

함수를 루프 외부로 이동하고 이에 대한 참조를 다음으로 전달할 수 있습니다 map.

function mapCallback(item) {
    return {
        id : item[0],
        title : item[1],
    };
}
for (i = 0; i < Collection.length; i += 4) {
    data.push({
        items: Collection.slice(i, i + 4).map(mapCallback)
    });
}

또는 JSHint 지시문을 사용하여 루프 내부의 함수 표현식을 무시할 수 있습니다. 문제가되는 파일의 맨 위에 이것을 넣으십시오.

/*jshint loopfunc: true */

루프에서 함수를 선언하는 것은 지저분하고 잠재적으로 오류가 발생하기 쉽습니다. 대신 함수를 한 번 정의한 다음 루프를 입력하십시오.

var objMaker = function(item) {
    return {
        id : item[0],
        title : item[1],
    };
};

for (i = 0; i < Collection.length; i += 4) {
    data.push({
                  items : Collection.slice(i, i + 4).map(objMaker)
             });
}

사람들은 "루프에서 함수를 선언하는 것은 지저분하고 오류가 발생할 가능성이 있습니다"라고 말하지만 루프 내의 함수는 예를 들어 Array.prototype.forEach 메서드 에서 직접 지시 하는 것입니다. "함수"라는 단어는 이론적으로 모든 forEach 호출 에서 새로 정의하는 것을 의미해야하기 때문에 Javascript 엔진에 의해 매번 실제로 정의된다는 의미는 아닙니다 .

엔진이 명령을 "지연"처리하므로 외부 루프도 마찬가지입니다. 실제로 변경된 사항 이 없으면 전체 forEach / Map / etc 구성 명령을 새로 정의하지 않고 새 인수를 제공합니다.

이러한 단순한 것들과 코드 컨텍스트에 대해 단서가 없었던 고대 JS 엔진의 시대는 오래 전에 사라졌습니다. 그러나 우리는 forEach 또는 Map 의 경우처럼 함수가 아직 인수로 전달 될 수 없을 때 고안된이 고대 경고를 받고 있습니다.

참조 URL : https://stackoverflow.com/questions/13082302/js-hint-dont-make-functions-within-a-loop

반응형