2017-12-27 2 views
0

나는 다음과 같은 코드가 있습니다루프의 외부에서이 함수를 정의

for (var entry in metadata) { 
    if (metadata.hasOwnProperty(entry)) { 
     var varName = metadata[entry].variableName; 
     if (metadata[entry].multipleValues === "false") { 
      if (angular.isDefined(vm[varName]) && (vm[varName] !== null) && vm[varName].id !== null) { 
       filters.push(factory.buildEntry(metadata[entry].variableName, vm[varName].id, null, factory.filterOperators.textContains)); 
      } 
     } else { 
      if (angular.isDefined(vm[varName]) && (angular.isArray(vm[varName])) && (vm[varName].length > 0)) { 
       filters.push(factory.buildEntry(metadata[entry].variableName, null, vm[varName].map(function (item) { 
        return item.id; 
       }), factory.filterOperators.textContains)); 
      } 
     } 
    } 
} 

을하지만 SonarQube는 Define this function outside of a loop.에 말해 유지하고, 나는이 루프 내부에있는 유일한 기능은 내가 Array.prototype.map() 방법에 전달 익명 함수입니다 :

function (item) { 
    return item.id; 
} 

본문에는 한 줄의 코드 만 있기 때문에 루프 외부에 정의하면 쓸모가 없습니다.

왜이 오류가 발생합니까? SonarQube를 건너 뛰도록 어떻게 말할 수 있습니까?

+0

오류의 원인을 직접 알아 냈습니다. 'SonarQube를 건너 뛰도록 어떻게 말할 수 있습니까? '-> 가능하다면 덧붙일 수있는 주석이있을 것입니다. 그렇지 않으면 SonarQube 인터페이스에서 false-positive로 표시해야합니다. – acdcjunior

+0

어떤 버전의 SonarJS를 사용하고 있습니까? 귀하의 케이스처럼 보이는 SonarJS 3.0에서 수정 된 항공권 https://jira.sonarsource.com/browse/SONARJS-772가 있습니다. –

답변

0

당신은 어떻게 당신은 변수에 기능을 할당 한 다음에 의해 함수로 경우

var foo = function(){console.log('bar')}; 
 
foo();

을 그 변수를 처리 할 수 ​​

var mapFunction = function (item) { 
        return item.id; 
       }; 
for (var entry in metadata) { 
    if (metadata.hasOwnProperty(entry)) { 
     var varName = metadata[entry].variableName; 
     if (metadata[entry].multipleValues === "false") { 
      if (angular.isDefined(vm[varName]) && (vm[varName] !== null) && vm[varName].id !== null) { 
       filters.push(factory.buildEntry(metadata[entry].variableName, vm[varName].id, null, factory.filterOperators.textContains)); 
      } 
     } else { 
      if (angular.isDefined(vm[varName]) && (angular.isArray(vm[varName])) && (vm[varName].length > 0)) { 
       filters.push(factory.buildEntry(metadata[entry].variableName, null, vm[varName].map(mapFunction), factory.filterOperators.textContains)); 
      } 
     } 
    } 
} 

루프 외부에서 정의에 대해 변수에 매핑 함수를 할당 한 다음 해당 변수를 .map()에 전달하면 효율성을 얻을 수 있습니다. ency boost는 루프가 실행될 때마다 함수를 다시 인스턴스화 할 필요가 없기 때문입니다. 그것은 같은 기능을 계속해서 또 다시 사용할 수 있습니다.

루프를 실행하는 둘러싸는 기능이 끝나자 마자 변수는 존재하지 않게됩니다.

관련 문제