日期:2014-05-16 浏览次数:20438 次
var status="outer";
function set(){
    var outers=status;
    var status="inner";
    var inners=status;
    alert("outer is:"+outers);
    alert("inner is:"+inners);
}
set();
var status="outer";
function set(){
    var outers=status;//预加载导致这里的status指向set函数内定义的变量,但这里却未对该变量初始化。
    var status="inner";
    var inners=status;
    alert("outer is:"+outers);
    alert("inner is:"+inners);
}
set();
------解决方案--------------------
outer is:undefined;
inner is:inner;
不知道是不是可以这么理解,引用闭包的概念(其实我也不是很懂)
首先这里有两个闭包,全局是一个,set方法是一个,在set方法中 var outers = test;此时会在set闭包中查找test,若这个闭包中没有test变量才会去他的父级闭包(即全局的闭包)中查找,但set闭包中有这个值只是没有定义,所以是undefined。
不知道可以不可以这么解释,一起学习。。
------解决方案--------------------
var status="outer";
function set(){
    /*var outers=status;
    var status="inner";
    var inners=status;
    alert("outer is:"+outers);
    alert("inner is:"+inners);*/
    //相当与
    var outers , status , inners ;//因为有了var关键字。顶层变量被遮盖
    outers = status ;
    status = 'inner';
    inners = status;
    alert("outer is:"+outers);
    alert("inner is:"+inners);    
}
set();
------解决方案--------------------
function set(){
    var outers = undefined;
    var status = undefined;
    var inners = undefined;
    var outers=status;
    var status="inner";
    var inners=status;
    alert("outer is:"+outers);
    alert("inner is:"+inners);
}