js中全局变量与局部变量的问题
<%@pagecontentType="text/html;charset=gb2312"language="java"%><html><head><title></ti...
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<script>
var mycool;
var scriptBlock = document.createElement("script");
function StartGet()
{
scriptBlock.src = "";
scriptBlock.src = "http://x.x.x/index.asp?check=login";
scriptBlock.type = "text/javascript";
scriptBlock.language = "javascript";
document.getElementsByTagName("head")[0].appendChild(scriptBlock);
scriptBlock.onreadystatechange = ReturnData;
}
function ReturnData()
{
if("loaded" == scriptBlock.readyState)
{
mycool = mystr;
alert(mycool);//这里打印是"yes"
}
}
StartGet();
alert(mycool);//这里怎么打印就不是"yes"了,"mycool"我定义的是全局变量呀,为什么,我怎样才能得到"yes"这个值.谢谢
</script>
</body>
</html>
mystr是在http://x.x.x/index.asp?check=login定义的呀,在服务器端的代码如下:
...................
response.Write("var mystr = 'yes';")
...................
楼下的朋友,我自己也测试了外面的alert(mycool)是会先执行,问题是为什么会先执行,程序是顺序执行的啊,我在函数外(注意要在函数外)哪个地方才能打印为”YES”.谢谢 展开
<html>
<head>
<title></title>
</head>
<body>
<script>
var mycool;
var scriptBlock = document.createElement("script");
function StartGet()
{
scriptBlock.src = "";
scriptBlock.src = "http://x.x.x/index.asp?check=login";
scriptBlock.type = "text/javascript";
scriptBlock.language = "javascript";
document.getElementsByTagName("head")[0].appendChild(scriptBlock);
scriptBlock.onreadystatechange = ReturnData;
}
function ReturnData()
{
if("loaded" == scriptBlock.readyState)
{
mycool = mystr;
alert(mycool);//这里打印是"yes"
}
}
StartGet();
alert(mycool);//这里怎么打印就不是"yes"了,"mycool"我定义的是全局变量呀,为什么,我怎样才能得到"yes"这个值.谢谢
</script>
</body>
</html>
mystr是在http://x.x.x/index.asp?check=login定义的呀,在服务器端的代码如下:
...................
response.Write("var mystr = 'yes';")
...................
楼下的朋友,我自己也测试了外面的alert(mycool)是会先执行,问题是为什么会先执行,程序是顺序执行的啊,我在函数外(注意要在函数外)哪个地方才能打印为”YES”.谢谢 展开
4个回答
展开全部
因为你外面的alert(mycool)会先执行,而这时候函数赋值还没完成,所以不会打印YES,然后再执行你函数里面的alert(mycool)时,赋值肯定已完成,所以打印为YES,
其实到最后,mycool的值就是YES
-------------------------------------------
JS执行是按顺序来的
document.getElementsByTagName("head")[0].appendChild(scriptBlock);
scriptBlock.onreadystatechange = ReturnData
等于就是给head中加了一段JS引用,并给这个引用加上了onreadystatechange事件,这时StartGet已经执行完了,之后浏览器再请求加载这个JS文件,并随着状态触发onreadystatechange事件
你想在外面打印出来YES,不知道有什么意义,因为加载的文件有可能很大,网络过慢等等原因,时间不确定,所以你要在外面打印出来,你就用window.setTimeout("alert('"+mycool+"')",时间)来延时打印喽
其实到最后,mycool的值就是YES
-------------------------------------------
JS执行是按顺序来的
document.getElementsByTagName("head")[0].appendChild(scriptBlock);
scriptBlock.onreadystatechange = ReturnData
等于就是给head中加了一段JS引用,并给这个引用加上了onreadystatechange事件,这时StartGet已经执行完了,之后浏览器再请求加载这个JS文件,并随着状态触发onreadystatechange事件
你想在外面打印出来YES,不知道有什么意义,因为加载的文件有可能很大,网络过慢等等原因,时间不确定,所以你要在外面打印出来,你就用window.setTimeout("alert('"+mycool+"')",时间)来延时打印喽
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实你这个代码的效果和下面是一样的:<br>var scope = 'global' ;<br>alert(scope);<br>function testScope(){<br> var scope;<br> alert(scope);<br> scope = 'local' ;<br> alert(scope);<br>}<br>这里就涉及到了,js对变量的处理问题了,js是这样的,无论你在js那里定义变量,它在执行的时候都会变成在开头(函数的开始)就定义所有的变量,但是不赋初始值,所有第二个会alert出 undefined。也是说第二个scope其实是局部变量,但没有初始值。就这样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
js 我也是初学者 我看着你这 mystr 怪奇怪的·他哪里冒出来的?我看着怎么像没赋值过·我把你得代码复制试验了下·出来的是undefined
貌似没赋值
貌似没赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询