带有jQuery和javascript的变量范围
因此,我编写了以下函数:带有jQuery和javascript的变量范围,javascript,jquery,Javascript,Jquery,因此,我编写了以下函数: function getData() { var data; $(function () { $.getJSON('https://ipinfo.io', function (ipinfo) { data = ipinfo; console.log(data); }) }) console.log(data); } 上面的问题是第二个console.log没有在jQuery中保留分配的
function getData() {
var data;
$(function () {
$.getJSON('https://ipinfo.io', function (ipinfo) {
data = ipinfo;
console.log(data);
})
})
console.log(data);
}
上面的问题是第二个console.log没有在jQuery中保留分配的信息,而是记录了一个未定义的对象。我不确定到底出了什么问题,但我认为这是一个相当小的问题。然而,尽管我在网上搜索了很多,我仍然没有找到这个问题的答案。有一行:Javascript是异步的。 虽然许多人很难弄清楚它到底意味着什么,但一个简单的例子可能可以解释这一点
var data;
$(function () {
$.getJSON('https://ipinfo.io', function (ipinfo) {//async function's callback
data = ipinfo;
console.log(data);//first console output
})
})
console.log(data);//second console output
当从$.getJSON
函数接收到数据时,异步函数的回调被执行,javascript将继续执行,而无需等待回调
将值分配给数据
变量,从而使您在控制台中记录未定义
(这是调用console.log
时data
变量的值
我希望我能解释一下。!
.jQuery.getJSON()
异步返回结果。您可以使用.then()
或async/wait
在jQuery承诺对象完成后通过代码使用数据
。可能的重复不是范围问题,而是操作顺序问题。由于异步性和顺序的性质,第二个控制台.log
在第一个之前执行。