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

variables in nested functions "undefined"

本文关键字:未定义 变量 嵌套 函数      更新时间:2023-09-26
windows.onload=function(){
    ...somecode...
    var scene = new THREE.Scene();
    ...somecode...
    var i;
    var j;
    for (i=......){...}
    func2();
    function func2(){
        ...somecode...
        BREAK AT THIS LINE;
    }
}

当我在那条线上休息时,
Firebug说,"i"和"j"是未定义的,但内部函数显然可以得到"i"的值对吗?
但奇怪的是,"场景"显示正确。
chrome的Ctrl + Shift + I显示了同样的事情。

但更奇怪的是,当我添加时

alert(i);

到 func2 的开头,
这一次msgBox 正确地告诉 i 的值,
Firebug 正确显示 i 的值,
但 j 仍然显示为未定义。

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

多谢。

i 的值应该在内部函数中可用。这将在Firebug和node中打印"2".js如预期的那样:

(function() { 
     for (var i=0; i<2; ++i) {}; 
     (function() { console.log(i) })(); 
})();

那么这只是调试器显示不正确值的问题吗?

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

如果你有这样的代码,那么这些var语句就会被提升到函数声明的顶部,所以它实际上看起来像

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

除此之外,没有理由不定义ij