我的网页上有以下代码:
<script type="text/javascript">
debugger; // 1
var dataClassObj = new DataClassList();
dataClassObj.init();
var viewModel = dataClassObj.getModel();
debugger; // 2
</script>
在js文件中我有:
var DataClassList = function () {
};
DataClassList.prototype = function () {
var viewModel;
// private memebers
var init = function () {
var self = this;
$.ajax({
url: "xxx",
type: 'GET',
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
// code
});
// code
self.viewModel = viewModel;
ko.applyBindings(viewModel);
debugger; // 3
},
error: function(xhr, status, error) {
$('#lblError').show();
}
});
},
getModel = function () {
debugger; // 4
return viewModel;
};
// public members
return {
init: init,
getModel: getModel
};
}();
当我使用Chrome的开发者工具运行时,点击调试器点。我认为它将在1-> 3-> 4-> 2中运行,但它总是以此顺序命中调试器语句1-&gt; 4-&gt; 2-&gt; 3我迷茫了至于它为什么这样做,我认为Javascript是同步的,所以它会点击1,然后调用init,这将触发3,然后调用4,最后调用2。
答案 0 :(得分:2)
$ .ajax是异步的。在其他代码运行后(通常),它将执行该调用。
答案 1 :(得分:0)
JavaScript是同步的,除了ajax调用,setTimeout()和setInterval()。