Javascript 自动执行匿名函数中未使用的局部变量警告

Javascript 自动执行匿名函数中未使用的局部变量警告,javascript,eclipse,Javascript,Eclipse,当在自执行匿名函数中声明变量时,Eclipse会生成“从不读取局部变量”,而在全局范围中声明时则不会生成 自动执行示例: var MODULE = {}; (function (module) { // THIS LINE GENERATES WARNING var FOO_BAR_ANON = {}; function Foo ( ) { if ( this instanceof Foo ) { // THIS IS WHERE VARIABLE IS

当在自执行匿名函数中声明变量时,Eclipse会生成“从不读取局部变量”,而在全局范围中声明时则不会生成

自动执行示例:

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 );
全局范围示例,未生成警告:

var MODULE = {};

var FOO_BAR_GLOBAL = {};

function FooGlobal ( ) {

  if ( this instanceof FooGlobal ) {

    this.fooBar = FOO_BAR_GLOBAL;

  } else {
    return new FooGlobal( );
  }
}

MODULE['FooGlobal'] = FooGlobal;

请您解释一下,为什么首先会生成警告,以及如何使其静音?

如果我正确地记得我的Javascript,那么它在全局中工作的原因是因为在您的自执行示例中,变量FOO\u BAR\u ANON不在函数FOO的作用域内。当我在EclipseRSA中启用JS验证器时,您的代码行

this.fooBar=FOO\u BAR\u GLOBAL

无法解析为值,因为就foo而言,变量在其作用域内不存在

另外,为了抑制这种情况,我的Javascript选项如下: 项目->属性->JavaScript->验证->错误和警告


在这里,您可以自定义引发或忽略的警告。在您的Eclipse版本中可能会有所不同。

这似乎是Eclipse中的一个已知错误:

当您在匿名函数中定义函数FOO并在FOO中引用
FOO\u BAR\u ANON
时,将捕获
FOO\u BAR\u ANON
。见文件

下面是bug报告中使用的示例(在页面末尾):

moveCaretTimer
被标记为从不读取,其出现处未高亮显示

(function() {
    var moveCaretTimer = -1;

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

    setMask.storageKey = storageKey;
})();