【问题标题】:Unused local variable warning in self-executing anonymous function自执行匿名函数中未使用的局部变量警告
【发布时间】:2013-07-11 18:12:18
【问题描述】:

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


    【解决方案1】:

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

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

    FOO_BAR_ANON 在匿名函数中定义函数 Foo 并在 Foo 中引用 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 被标记为从未读过,它的出现未突出显示。

    【讨论】:

      【解决方案2】:

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

      this.fooBar = FOO_BAR_GLOBAL;

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        相关资源
        最近更新 更多