[英]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.