2016-08-01 89 views
0

假设我有代码,代码1和代码2两条线,这两个都非常快,拼命地跑:有两个即刻完成的代码可能会在第一行完成之前完成第二行吗?

$(function(){ 
    var flag=0 
    var fistElement=$("#someHTML"); 
    var secondElement=$("#someOtherHTML"); 

    fisrtElement.append(secondElement); //code1 
    flag=1        //code2 
}) 

由于代码的两条线路(代码1和代码2)我会假设可以瞬间完成,在那里标志更新(code2)在html更新(code2)之前完成的概率?尽管通常在我用几个例子测试时,code1总是在code2之前完成。

+1

不,上面的代码是程序性的 – Phil

+1

JavaScript将等待代码1在执行代码2之前完成 –

+1

此代码不会异步执行 – madalinivascu

回答

3

JS是程序代码,它意味着它是逐行执行的(除非少数情况下代码执行异步)。

这意味着你的代码将永远在同一顺序执行=>code1就一定会执行前//code2

+0

当然我知道code1会在code2之前**开始**,但是我怀疑的一点是Code1 ** FNISH **在code2之前是否 – badbye

+0

@badbye通过说“执行”我是指从**开始**到**完成** – Justinas

+0

这可能是一个反你的说法:

bonjour
badbye

0

试试这个:

function foo(callback) { 
    //flag=1 //code2 
    console.log("Code 2 executed") 
    callback(); 
} 
foo(function() { 
     //fisrtElement.append(secondElement); //code1 
    console.log("Code 1 executed") 
}); 

这工作,测试它IN JSFIDDLE

你的解决方案。您的代码应该是这样的

$(function(){ 
    var flag=0 
    var fistElement=$("#someHTML"); 
    var secondElement=$("#someOtherHTML"); 
    foo(1,function() { 
     fisrtElement.append(secondElement); //code1 
     //console.log("Code 1 executed") 
    }); 

    function foo(f, callback) { 
     flag=f //code2 
     //console.log("Code 2 executed") 
     callback(); 
    } 
}) 

希望它能帮助。谢谢

+0

对不起,我可能是错的,但为什么将代码移动到函数使其异步?而你的代码没有多大意义:首先你将'1'作为'flag'传递,而不是指定1来标记,做回调,并且比'foo'之后再做同样的事情。在Fiddle中:你首先执行'foo'函数,记录''执行代码2'',然后回调。这里没有异步。 – Justinas

+0

抱歉,我忘记清理我的代码并感谢您的评论。那么只是将代码移到函数中并不会使它在本质上是异步的,虽然我上面的例子并不是最好的来说明异步但是回调绝对是一种实现它的方法。 –

+0

实际上,回调会**不会使其异步。 'setTimeout'会。阅读这里:http://stackoverflow.com/questions/9516900/how-can-i-create-an-asynchronous-function-in-javascript – Justinas

相关问题