var status="outer";
function set(){
var outers=status;
var status="inner";
var inners=status;
alert("outer is:"+outers);
alert("inner is:"+inners);
}
set();能有人给解释一下结果吗?
function set(){
var outers=status;
var status="inner";
var inners=status;
alert("outer is:"+outers);
alert("inner is:"+inners);
}
set();能有人给解释一下结果吗?
弹出以下两次吧
outer is:inner
inner is:inner
结果是
outer is:undefined
inner is:inner变量优先解析
inner is:inner
function set(){
var outers=status;// 使用局部变量,使用位置在初始化局部变量之前,所以局部变量未初始化为undefined
var status="inner";//定义局部变量
var inners=status;// 使用局部变量,局部变量已初始化
alert("outer is:"+outers);
alert("inner is:"+inners);
}
set();
function set(){
var outers=status;//预加载导致这里的status指向set函数内定义的变量,但这里却未对该变量初始化。
var status="inner";
var inners=status;
alert("outer is:"+outers);
alert("inner is:"+inners);
}
set();
inner is:inner;不知道是不是可以这么理解,引用闭包的概念(其实我也不是很懂)首先这里有两个闭包,全局是一个,set方法是一个,在set方法中 var outers = test;此时会在set闭包中查找test,若这个闭包中没有test变量才会去他的父级闭包(即全局的闭包)中查找,但set闭包中有这个值只是没有定义,所以是undefined。不知道可以不可以这么解释,一起学习。。
其实使用局部变量是因为,set方法中有这个变量。若没有还是会使用全局变量的。
这里写明白了
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);
}
预解析之后是这个样子的,然后你要的结果就有了。
如果有function 预解析会先解析function,然后解析var 定义的