先說結論:
首先,JavaScript是解釋性語言,本來就是順序執行的!!
所以,如果發現有一段js代碼總是在一段代碼之前就執行完了,比如說報了null異常,那么有可能是回調函數的異步機制造成的。
此種情形下解決的方法是,把要執行的函數放在回調函數內部就可以了。
舉個栗子
例如用JQuery Ajax 的 $.getJSON 方法:
$(function () { $.getJSON("url", function (res) { $("#myDiv").append("<div id = "divId">"+res.name+"</div>"); } }); $(function(){ var a = document.getElementById("divId"); console.log(a.innerHTML); });
這種情況下結果是null,這就是因為第二個函數會在第一個含有回調函數的函數執行完畢之前就開始執行了,還沒等append()方法執行,所以結果為空。那么把第二個方法放入回調方法內
$(function () {
$.getJSON("url", function (res) {
$("#myDiv").append("<div id = "divId">"+res.name+"</div>");
printA();
}
});
function printA(){
var a = document.getElementById("divId");
console.log(a.innerHTML);
}
結果為res.name
