关于setTimeout和console.log执行顺序

最近为了用bootstrap 的modal 模态框重写confirm确认框做了一些实验,在追求阻塞的路上,悲剧的都失败了。在悲愤之际我决定写一个简单粗暴的递归程序来强行阻塞我的程序,然鹅,在使用setTimeout 和console.log 做实验的时候,出现了更加复杂和深刻的问题。

首先,代码1:

function _confirm( text) {
flag = - 1 ; // flag初始值
$("#modal-confirm").modal('show') // 显示模态框
$("#modal-confirm .modal-body").text(text); //修改模态框提示内容
$( "#modal-confirm .btn-default"). off( "click");
$("#modal-confirm .btn-default").on("click",function(){ //点击取消按钮,输出cancle!,flag设为0
console. log( "cancel!");
flag = 0;
});
$( "#modal-confirm .btn-primary"). off( "click");
$("#modal-confirm .btn-primary").on("click",function(){ //点击确认按钮,输出sure,flag设为1
console. log( "sure!");
flag = 1;
});

while ( flag < 5 ) {
flag = flag + 1;
console. log( flag);
}
};

_confirm( "dgtest!");



输出:

无视警告。

问题1:为什么console.log输出两遍?


代码2

其余同代码1:


while ( flag < 5 ) {
flag = flag + 1;
setTimeout( function(){ console. log( "{" + flag + "}");}, 0);
console. log( flag);
}

输出:


问题2: 为什么

setTimeout(function(){console.log("{" +flag +"}");}, 0);

立即执行,但在console.log之后输出?



代码3:

while ( flag < 5 ) {
flag = flag + 1;
setTimeout( function(){ console. log( "{" + flag + "}");}, 3000);
console. log( flag);
}

点击确认。

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值