Javascript 自动执行匿名函数中未使用的局部变量警告
当在自执行匿名函数中声明变量时,Eclipse会生成“从不读取局部变量”,而在全局范围中声明时则不会生成 自动执行示例: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
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;
})();