首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

初学者来问一个js变量的有关问题

2012-03-28 
菜鸟来问一个js变量的问题JScript codevar statusouterfunction set(){var outersstatusvar status

菜鸟来问一个js变量的问题

JScript code
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;// 使用局部变量,使用位置在初始化局部变量之前,所以局部变量未初始化为undefined
var status="inner";//定义局部变量
var inners=status;// 使用局部变量,局部变量已初始化
alert("outer is:"+outers);
alert("inner is:"+inners);
}
set();


[解决办法]
应该是js预加载导致的。
JScript code
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;// 使用局部变量,使用位置在初始化局部变量之前,所以局部变量未初始化为

[解决办法]
之所以会弹出'undefined'是因为,第执行alert时,局部变量outers仍未被初始化
[解决办法]
http://code.usuishi.com/Web/ArticleView.aspx?ArticleID=110
这里写明白了
[解决办法]
这个就涉及到作用域了,解析器是从内到外查找对象,局部变量要优先全局变量~~~
[解决办法]
JScript code
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();
[解决办法]
JScript code
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);} 

热点排行