Javascript 嵌套函数中的变量“未定义”

Javascript 嵌套函数中的变量“未定义”,javascript,Javascript,当我突破那条线时, firebug说,i和j是未定义的,但是一个内部函数显然可以得到i的值,对吗? 但奇怪的是,这个场景显示得很正确。 chrome的Ctrl+Shift+I显示相同的内容 但更奇怪的是, 当我加上 windows.onload=function(){ ...somecode... var scene = new THREE.Scene(); ...somecode... var i; var j; for (i=......){.

当我突破那条线时, firebug说,i和j是未定义的,但是一个内部函数显然可以得到i的值,对吗? 但奇怪的是,这个场景显示得很正确。 chrome的Ctrl+Shift+I显示相同的内容

但更奇怪的是, 当我加上

windows.onload=function(){
    ...somecode...
    var scene = new THREE.Scene();
    ...somecode...
    var i;
    var j;
    for (i=......){...}
    func2();
    function func2(){
        ...somecode...
        BREAK AT THIS LINE;
    }
}
到第二章的开头, 这一次,, msgBox正确地告诉i的值, firebug正确显示i的值, 但是j仍然是未定义的

我想知道为什么, Firebug和chrome都显示了相同的东西,所以它似乎不是Firebug的bug, 那么有什么提示吗


非常感谢。

我的值应该在内部函数中可用。这将按预期在Firebug和node.js中打印2:

alert(i);
那么,这只是调试器显示错误值的问题吗

(function() { 
     for (var i=0; i<2; ++i) {}; 
     (function() { console.log(i) })(); 
})();
如果您有这样的代码,那么这些var语句将被提升到函数声明的顶部,因此实际上看起来

function func2(){
    BREAK HERE;
    ...
    for (var i = ...
    for (var j = ...
}

除此之外,在你展示的代码中,没有理由不定义i和j

你没有在任何点设置j,因此它将是不定义的…但是为什么我第一次未定义,但场景可以正确显示?没有足够的数据进行诊断,请充实你的示例。
function func2() {
    var i, j;
    BREAK HERE:
    ...
    for (i = ...
    for (j = ...
}