Javascript Local vs Global

rid*_*n88 2 javascript jquery global-variables

我以为我把这个烂摊子整理在我脑海中,但由于一些奇怪的原因它不能正常工作.

如果在函数/作用域之外声明一个变量并在函数内部没有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);
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 8

您正在使用A jax请求.

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

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

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

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

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

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