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”.谢谢
展开
 我来答
雪箂
2009-03-03 · TA获得超过502个赞
知道小有建树答主
回答量:471
采纳率:57%
帮助的人:83.9万
展开全部
js的执行方式是不会等待返回值回来再接着执行的,它会一直执行下去.
所以会在执行StratGet()方法的时候继续执行下面的alert(mycool);这就是同步执行,而ajax所提倡的异步执行是指,当你将请求提交给后台以后,没有返回任何结果之前,是不会执行js代码的.所以,建议楼主开始系统的学习ajax相关知识.
config7
2009-02-26 · TA获得超过128个赞
知道答主
回答量:51
采纳率:0%
帮助的人:0
展开全部
因为你外面的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+"')",时间)来延时打印喽
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无恬公羊元亮
2019-02-16 · TA获得超过3854个赞
知道大有可为答主
回答量:3042
采纳率:26%
帮助的人:378万
展开全部
其实你这个代码的效果和下面是一样的:<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其实是局部变量,但没有初始值。就这样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
东几
2009-02-26 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:0
展开全部
js 我也是初学者 我看着你这 mystr 怪奇怪的·他哪里冒出来的?我看着怎么像没赋值过·我把你得代码复制试验了下·出来的是undefined
貌似没赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式