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

时间:2013-07-11 18:12:19

标签: 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 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;

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

2 个答案:

答案 0 :(得分:3)

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

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

在匿名函数中定义函数Foo并在Foo中引用FOO_BAR_ANON时捕获

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被标记为从不读取,其出现未突出显示。

答案 1 :(得分:0)

如果我正确地记住了我的Javascript,它在Global中工作的原因是因为在你的自动执行的例子中,变量FOO_BAR_ANON在函数Foo的范围之外。当我在Eclipse RSA中启用我的JS验证器时,你的行

this.fooBar = FOO_BAR_GLOBAL;

无法解析为某个值,因为就foo而言,该变量在其范围内不存在。

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

您可以在此处自定义抛出或忽略的警告。它的Eclipse版本可能有所不同。