Javascript Local vs Global

我以为我把这个烂摊子整理在我的头脑中,但由于一些奇怪的原因它无法正常工作。

如果在函数/作用域之外声明一个变量并在函数内部没有var的情况下引用它,那么它会改变先前声明的变量……对吗?

但是,第一个警报返回正确的价格,但第二个(最后一个)警报返回0.我做错了什么?

//get pricing var price=0; var modelid = $("#model_input").val(); var inCode = $("#code_input").val(); $.get("getpricing.php", { 'modelid': modelid ,'code' : inCode }, function(data){ price = data; alert(price); }); alert(price); 

您正在使用A jax请求。

那些另外指定 unkess是A同步的:它们在后台执行,而不会停止执行脚本的其余部分。

因此,在Ajax请求完成之前执行最后一行代码的alert ; 这意味着当时price仍为0。

改变这种方法的一种方法是使用同步请求(参见async选项 ); 但我强烈建议不要这样做; 引用文档:

默认情况下,所有请求都是异步发送的(默认情况下设置为true)。 如果需要同步请求,请将此选项设置为false。 请注意,同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作。

而你绝对不希望你的应用程序冻结整个浏览器!

您应该重新考虑应用程序的设计方式,在这种情况下:您只能在Ajax请求完成后使用“价格”信息 – 这可能意味着您应该在调用其成功的函数中放置更多代码:just在$.get之后放置代码是不够的。

使用.get的httprequests是异步的,因此第一个警报(第二个声明的警报)将警告原始值,因为请求的回调尚未触发。