先说结论:
首先,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