<script type="text/javascript">
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000,function() {
alert("Hello JavaScript");
});
});
});
</script>上面代码的效果是以两秒的效果隐藏div后,再执行回调函数,弹出”Hello JavaScript“,那下面这段代码为什么不行?<script type="text/javascript">
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000);
alert("Hello JavaScript");
});
});
</script>JS不是单线程吗? $("div").hide(2000);和 alert("Hello JavaScript");不应是前者执行完了,后者再执行吗?为什么前者的动画效果还没执行完,就执行后面的代码,难道是JS碰到动画之类效果的时候是抛给别的线程执行的,它自身不执行渲染之类的效果,所以它就立即执行后面的代码。JavaScriptjQuery
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000,function() {
alert("Hello JavaScript");
});
});
});
</script>上面代码的效果是以两秒的效果隐藏div后,再执行回调函数,弹出”Hello JavaScript“,那下面这段代码为什么不行?<script type="text/javascript">
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000);
alert("Hello JavaScript");
});
});
</script>JS不是单线程吗? $("div").hide(2000);和 alert("Hello JavaScript");不应是前者执行完了,后者再执行吗?为什么前者的动画效果还没执行完,就执行后面的代码,难道是JS碰到动画之类效果的时候是抛给别的线程执行的,它自身不执行渲染之类的效果,所以它就立即执行后面的代码。JavaScriptjQuery
(document).ready(function() {
没加$符号
改成$(document).ready(function() {
alert(111);
},2000);
alert(222);
你觉得结果是
111 222
还是
222 111
学习首先必须是服从,然后才能自由。
JS是单线程的,如果你想看下hide是怎么执行的,你可以用浏览器调试一下,设置一个断点,然后跟踪进jQuery源码里面看
而setTimeout()就相当于抛出个新的线程。
你可以把setTimeout()当成一个定时自动触发的事件
<script type="text/javascript">
function jisuan() {
var i;
for(i = 1; i<100000; i++)
{
var b = 1;
b += i;
document.write(b + "<br />");
}
alert("hahah");
}
jisuan();
alert("what");
</script>最后的结果是先显示hahah,再显示what。应用在hide()上的话,不应该是hide的动画先显示完吗?再处理后面的语句吗?
而setTimeout()就相当于抛出个新的线程。
你可以把setTimeout()当成一个定时自动触发的事件
为了避免这个情况,您可以以参数的形式添加 Callback 函数。