请教一个 js 问题

2020-08-19 09:30:38 +08:00
 dapengzhao
$(document).ready(function () {
            $.ajax({
                url: "{% url 'func' %}?x={{ x }}&y={{ y }}",
                success: function (response) {
                    if (response.count >= 0) {
                        z = response.count;
                        alert(z) # 可以弹框
                        
                    }
                }
            });
        alert(z) # 没有反应
2843 次点击
所在节点    问与答
35 条回复
toma77
2020-08-19 09:34:42 +08:00
Uncaught ReferenceError: z is not defined
kop1989
2020-08-19 09:36:07 +08:00
js 当你给某个变量赋值时,如果这个变量没声明过,会进行声明。
但是你最下面的 alert(z),这个 z 还未进行过任何声明 /赋值。必然是抛异常的。
masker
2020-08-19 09:37:42 +08:00
多扎实基础吧。 作用域
TomVista
2020-08-19 09:39:02 +08:00
alert(z) 时$.ajax 还没运行
Yumwey
2020-08-19 09:39:14 +08:00
执行上下文中,z 尚未声明,ajax 异步了。
sevenzhou1218
2020-08-19 09:49:42 +08:00
php 程序员经常干这事....
AngryPanda
2020-08-19 09:58:07 +08:00
@sevenzhou1218 我都懒得骂你
masker
2020-08-19 10:03:30 +08:00
@sevenzhou1218 蠢比?
flowfire
2020-08-19 10:14:38 +08:00
@TomVista
@Yumwey
跟异步没关系,js 里新声明的变量作用域是函数级,出了函数就访问不到( let 是块级,出了大括号就访问不到)
即使这里是个 IIFE 也会报错
flowfire
2020-08-19 10:15:28 +08:00
@flowfire 补充一下 ,let const 都是块级作用域。
sevenzhou1218
2020-08-19 10:22:56 +08:00
@AngryPanda
@masker
早上没刷牙吗? 还是戳到你的痛点了? 我遇到的 php 程序员本来就经常干这事。
toma77
2020-08-19 10:23:59 +08:00
@flowfire 这里就是异步的问题,z = response.count 这种不加 var/const/let 声明的是全局变量
AngryPanda
2020-08-19 10:26:00 +08:00
@sevenzhou1218

我来告诉你原因 —— 因为你只能和这样水平的人在一起工作。
qiayue
2020-08-19 10:28:27 +08:00
@sevenzhou1218 你遇到的 PHP 程序员都干这事,你的反思反思,为什么会与这样的 PHP 程序员为伍 3
flowfire
2020-08-19 10:31:20 +08:00
@toma77 我的错。。。。。严格模式习惯了。。。不带 var let const 会报错
Biwood
2020-08-19 10:35:19 +08:00
https://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

阮一峰老师这篇博客很好的解释了 JavaScript 里面同步和异步的区别,建议认真看看。对于新手来说,这块确实不好理解,大家都是这么一步步走过来的。
masker
2020-08-19 10:38:40 +08:00
@sevenzhou1218 都不是。 单纯觉得你的发言蠢。
sevenzhou1218
2020-08-19 10:38:59 +08:00
@AngryPanda
@qiayue
确实啊,我自己就是 php 出身啊,我也从没说过自己牛逼啊。我只是说 php 程序员经常干这事而已。
sevenzhou1218
2020-08-19 10:39:49 +08:00
@qiayue
@AngryPanda
@masker
相互拉黑吧,不想跟你们扯了。
AngryPanda
2020-08-19 10:41:17 +08:00
@sevenzhou1218 你这种人需要拉黑?我就喜欢看你上蹿下跳。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/699501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX