嵌套函数中的变量“undefined”

时间:2011-11-04 14:23:44

标签: javascript

windows.onload=function(){
    ...somecode...
    var scene = new THREE.Scene();
    ...somecode...
    var i;
    var j;
    for (i=......){...}
    func2();
    function func2(){
        ...somecode...
        BREAK AT THIS LINE;
    }
}

当我在那条线上打破时,
萤火虫说,“我”和“j”是未定义的,但内部函数显然可以得到“i”的值吗?
但很奇怪,“场景”是正确显示的 Chrome的Ctrl + Shift + I显示相同的内容。

但更奇怪的是, 当我添加

alert(i);

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

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

非常感谢。

2 个答案:

答案 0 :(得分:0)

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

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

这只是调试器显示错误值的问题吗?

答案 1 :(得分:0)

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

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

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

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