1
morethansean 2016-07-24 16:18:24 +08:00
这哪是局部变量还是全局变量, xhr 是异步的你 send 之后代码又不会停住等你取结果。
|
2
ljbha007 2016-07-24 16:22:02 +08:00
楼主需要理解一下 js 中的异步操作是什么意思
|
3
cstome OP @morethansean 嗯,那么要怎样实现我想要的功能,可以给个思路吗?
|
4
eastpiger 2016-07-24 17:14:09 +08:00 via Android
这个应该已经是全局了吧。然而重点在于异步的话, log 的时候并没有执行到赋值的地方呢
|
5
learnshare 2016-07-24 17:15:45 +08:00
xhr 是基于事件来处理结果的,也就是 xhr 会在拿到结果之后,调用你绑定的事件监听函数。
|
7
SoloCompany 2016-07-24 17:20:22 +08:00
xhr 可以用 async:false 但这是 deprecated 的功能用了是自寻死路,还是老老实实去学一下怎么用异步吧
|
8
caomu 2016-07-24 17:48:28 +08:00 via Android
function nextStep(result){console.log(result)}
getList.onreadystatechange = function () { …… nextStep(listArr) ……} |
10
surgit 2016-07-24 18:31:07 +08:00
@cstome 局部变量是相对的, 如果一个变量 a 可以在 function b 里总是取的到 你就可以把他当作类似全局的来用呀.
|
11
EchoWhale 2016-07-24 18:31:11 +08:00 via Android
你已经将 xhr 的结果输出到全局变量了。
之所以你得到了 undefined ,是因为你在 xhr 获得结果并将结果赋值给 listArr 之前访问了全局变量 listArr |
12
horizon 2016-07-24 20:08:31 +08:00
这和全局变量,局部变量没关系。是异步的问题。。
|
13
sensui7 2016-07-24 20:26:17 +08:00 via iPhone
给 onreadystatechange 的处理函数一个回调参数,把你的操作挪到回调函数里去
|
14
cs419 2016-07-24 21:48:14 +08:00
首先第一行应该是 [listArr = 1;] 之后可以看到 listArr 是否改变。
其次既然是全局的, var 就可以省略了。 最后所有语句都执行完成后,在浏览器控制台再次运行 [console.log(listArr);] |
15
will0404 2016-07-25 09:07:41 +08:00 via iPhone
为什么一定要附到全局上呢 看你的需求不需要这么做啊 你只是不懂异步 要搞清楚 js 中蛋疼的流程控制
|
16
miaotaizi 2016-07-25 09:49:49 +08:00
用回调函数解决.
|
17
xcodebuild 2016-07-25 10:00:43 +08:00
。。。随便找本小书看看。。编程不是靠猜的。。
|