[英]Variable scope with jQuery and javascript
所以,我写了以下函数:
function getData() {
var data;
$(function () {
$.getJSON('https://ipinfo.io', function (ipinfo) {
data = ipinfo;
console.log(data);
})
})
console.log(data);
}
上面的问题是第二个console.log没有保留jQuery中的赋值信息并记录一个未定义的对象。 我不确定是什么问题,但我认为这是一个非常小的问题。 然而,就像我在网上搜索一样,我还没有找到这个特定问题的答案。
一行: 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
函数接收数据时执行async函数的回调,javascript继续进行而不等待callback
将值赋给data
变量,导致您在控制台中记录undefined
(这是值调用console.log
时的data
变量。
我希望我能解释一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.