4

当在自执行匿名函数内声明变量时,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;

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

4

2 回答 2

3

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

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

FOO_BAR_ANON当您在匿名函数中定义函数 Foo 并FOO_BAR_ANON在 Foo 中引用时捕获。请参阅闭包文档。

这是错误报告中使用的示例(在页面末尾):

(function() {
    var moveCaretTimer = -1;

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

    setMask.storageKey = storageKey;
})();

moveCaretTimer被标记为从未读过,它的出现没有突出显示。

于 2013-07-11T21:20:01.603 回答
0

如果我没记错我的 Javascript,它在 Global 中工作的原因是因为在您的自动执行示例中,变量 FOO_BAR_ANON 超出了函数 Foo 的范围。当我在 Eclipse RSA 中启用我的 JS 验证器时,你的行

this.fooBar = FOO_BAR_GLOBAL;

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

此外,为了抑制这种情况,我的 Javascript 选项位于:Project->Properties->JavaScript->Validation->Errors and Warnings。

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

于 2013-07-11T20:19:05.463 回答