所以,我写了以下函数:
function getData() {
var data;
$(function () {
$.getJSON('https://ipinfo.io', function (ipinfo) {
data = ipinfo;
console.log(data);
})
})
console.log(data);
}
上面的问题是第二个console.log没有保留jQuery内部赋值的信息并记录一个未定义的对象。我不确定是什么问题,但我认为这是一个非常小的问题。但是,就像我在网上搜索一样,我还没有找到这个问题的答案。
答案 0 :(得分:3)
一行: Javascript是异步。
虽然许多人很难弄清楚它究竟意味着什么,但一个简单的例子可能会解释你。
对于传统的程序员来说,很难理解JavaScript的执行顺序不是1,2然后是3而是1,3,2。
为什么会发生这种情况是因为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继续进行,而不等待callback
将值赋给{{1}变量,导致您在控制台中记录data
(当您致电undefined
时,这是data
变量的值。
我希望我能解释一下。!