当在自执行匿名函数中声明变量时,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;
请你解释一下,为什么首先会产生警告,以及如何使警告静音?
答案 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版本可能有所不同。