日期:2014-05-16  浏览次数:20347 次

javascrip异步简单例子的疑问
我看了关于js异步的概念 ,但是对下面的例子产生了疑问
function f1(callback){
 setTimeout(function(){
console.log("f1 task codes")
  callback();
 },1000)
}

function f2(){
  console.log("f2 task codes")
}
f1(f2);

所谓异步就是f1如果有较长时间的任务的话,f2是不会阻塞的,也就是说f2会先执行,等f2执行完,f1再继续执行,这样的话 上面的代码结果应该是 先f2 task codes,然后再f1 task codes. 但是结果却是相反 没有体现出JS异步功效
------解决方案--------------------
哪里有体现异步这个概念?
console.log("f1 task codes")
  callback();//等价于f2()
明明是先执行的f1 task codes然后才执行f2 task codes所以得到的结果肯定是f1啊
------解决方案--------------------
你这个不是异步~
稍微修改一下:

function f1(callback){
   setTimeout(function(){callback()},1000);
   console.log("f1 task codes")
}

这样就能异步执行了

------解决方案--------------------
这样也没体现出异步吧
------解决方案--------------------
还是先执行f1 ,再执行了f2
------解决方案--------------------
你的callback  是在 f1里的  console.log后面执行的。。。
楼主可以把f2单独出来执行  就有效果了
------解决方案--------------------
引用:
还是先执行f1 ,再执行了f2


你是不是要这样
function f1(callback){
 setTimeout(function(){
   console.log("f1 task codes")
 },1000);
 callback();
}

function f2(){
  console.log("f2 task codes")
}
f1(f2);