2013-07-11 3 views
4

변수는 자체 실행 익명 함수 내에서 변수가 선언 될 때 '로컬 변수가 읽히지 않습니다.'를 생성하고 전역 범위에서 선언 될 때 생성하지 않습니다.자체 실행 익명 함수에서 사용되지 않는 로컬 변수 경고

자동 실행 예 : 경고가 처음에 생성되는 이유

var MODULE = {}; 

var FOO_BAR_GLOBAL = {}; 

function FooGlobal () { 

    if (this instanceof FooGlobal) { 

    this.fooBar = FOO_BAR_GLOBAL; 

    } else { 
    return new FooGlobal(); 
    } 
} 

MODULE['FooGlobal'] = FooGlobal; 

하면, 설명해 주시겠습니까 및 방법 :

var MODULE = {}; 

(function (module) { 

    // THIS LINE GENERATES WARNING 
    var FOO_BAR_ANON = {}; 

    function Foo () { 

    if (this instanceof Foo) { 

     // THIS IS WHERE VARIABLE IS USED 
     this.fooBar = FOO_BAR_ANON; 

    } else { 
     return new Foo(); 
    } 
    } 

    module['Foo'] = Foo; 

})(MODULE); 

글로벌 스코프 예, 경고가 생성되지 그것을 침묵 시키는가?

답변

3

이 이클립스에 알려진 버그가 나타납니다 당신이 익명 함수 내에서 함수 foo를 정의하고 푸 내 FOO_BAR_ANON을 참조 할 때

https://bugs.eclipse.org/bugs/show_bug.cgi?id=351470

FOO_BAR_ANON이 캡처됩니다. Closures 설명서를 참조하십시오. 그 사건은 강조하지,

(function() { 
    var moveCaretTimer = -1; 

    function setMask() { 
     (function() { 
      function focusEvent() { 
       var moveCaret = function() { 
       // empty 
       }; 
       clearTimeout(moveCaretTimer); 
       moveCaretTimer = setTimeout(moveCaret, 0); 
      } 
     })(); 
    } 

    setMask.storageKey = storageKey; 
})(); 

moveCaretTimer이 같은 읽어 본 적이 표시됩니다 :

여기 (페이지 끝) 버그 보고서에 사용 된 예입니다.

0

JavaScript가 올바르게 기억되는 경우 전역에서 작동하는 이유는 자체 실행 예제에서 FOO_BAR_ANON 변수가 Foo의 범위를 벗어 났기 때문입니다. 이클립스 RSA에서 JS 유효성 검사기를 활성화했을 때, 귀하의 라인

this.fooBar = FOO_BAR_GLOBAL;

은 foo와 관련하여 변수가 해당 범위에 없기 때문에 값으로 해석 될 수 없습니다.

또한 이것을 억제하기 위해 자바 스크립트에 대한 나의 옵션은 프로젝트 -> 속성 -> JavaScript-> 유효성 검사 -> 오류 및 경고입니다.

여기에서는 던져 지거나 무시되는 경고를 사용자 정의 할 수 있습니다. Eclipse 버전에 따라 다를 수 있습니다.

관련 문제