
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 。。。随便找本小书看看。。编程不是靠猜的。。 |