我知道有很多"如何避免此警告"的问题,但看起来我的是第一个特定于JavaScript的问题。在本例中,我想在的声明中引用我要初始化的,就像这样: (如果这看起来很熟悉,也许你以前使用过ExtJS——这是他们的大多数东西是如何构建的。) 当我调用 所以我不知道如何处理这个问题。我应该忽略这个警告吗?有没有办法把它标记成这样,这样我就不会再收到警告了?我做错了吗?我是否应该以另一种方式递交我的推荐信?var foo = new Foo({
bar: new Bar({
x: function(){
doStuff(foo);
}
});
});
foo.bar.x()
时,我想指向拥有调用函数(x
)的Bar (bar
)的Foo (foo
)。这可以工作,但是我的Eclipse警告我"foo可能还没有初始化",引用对doStuff();
的调用——因为当引擎第一次看到这行时,我们还没有完成对foo
的定义。当然,x()
不能被调用,除非foo
被成功构造,但是我的风格检查器显然没有发现这一点。
var Foo = function() { }
var Bar = function (obj) {
// foo is not initialized
obj.x();
// called doStuff with undefined
}
var foo = new Foo({
bar: new Bar({
x: function(){
doStuff(foo);
}
});
});
Eclipse是正确的如果你想要一个更好的分析系统,可以考虑使用WebStorm 3.0或Visual Studio 11作为你的JS IDE。
这与javascript无关,但可能与Eclipse有关。变量foo可以在任何地方声明,因为变量声明是在执行任何代码之前处理的。它也可以在调用doStuff之前的任何时间初始化(尽管不声明变量的初始化被认为是不好的形式)。
首先构造一个Foo。将一个新的Bar传递给它的构造函数,该函数使用变量foo传递给它。
但是foo只有在foo的构造函数完成后才赋值。此时,已经使用未声明的变量foo声明了函数。如果在Bar或Foo的构造函数中使用该函数,则会失败。
我认为@RobG是对的,这是一个Eclipse问题,最好处理它。但是如果您想避免它,您可以在初始化foo
之前声明它,我打赌这将使Eclipse不会抱怨:
var foo;
foo = new Foo({
bar: new Bar({
x: function(){
doStuff(foo);
}
});
});