JavaScript函数是同步的还是异步的?

4

我有以下JS代码:

<script>
first();
second();
</script>

我想确保second()会在first()完全执行完成后运行。这是预期的默认行为吗?


难道不是更快去尝试并查看(或者...检查JS规范?如果不是这样,那么它与其他99.99%的语言有很大的区别,然后在文档中进行了突出显示)... - Adriano Repetti
4个回答

5

这取决于您在first()second()函数内部拥有什么。如果存在一些异步调用,first()可能会在second()之后结束。

例如:

function first(){
    console.log("I'm first");   
}
function second(){
    console.log("I'm second");   
}

first();
second();

将会打印

我是第一个

我是第二个

现在假设你在你的first()函数中有一个ajax调用,需要10秒才能结束:

function first(){
    $.ajax({
        //--- blah blah
        success: function(){
            //--- success runs after 10 seconds
            console.log("I'm first");   
        }
    })
}

如果你运行

first();
second();

您将会打印

我是第二个

我是第一个

这里 您可以找到另一个例子


现在清楚了,非常感谢 :) 是的,我有 AJAX 调用。所以我应该将第二个函数作为对第一个函数的响应运行 :) - Michael Samuel

2
是的,这是预期行为。您还可以定义一些异步函数,比如 AJAX 调用。您还可以定义类似于异步调用的行为,请查看以下链接。

http://krasimirtsonev.com/blog/article/7-lines-JavaScript-library-for-calling-asynchronous-functions

http://jsbin.com/AhirAlOV/5/edit?html,js,output

重要提示:
请记住,JavaScript 不是多线程语言。JavaScript 将在单个线程中运行,但将按块执行。因此,在继续到下一个块之前,它必须完成已排队的每个代码块。您可以通过事件和回调获取异步调用的幻觉。

0

Javascript 中大部分的函数都是同步的。如果你想要依次调用多个同步函数

 first();
 second();     

它们将按顺序执行。second将在first完成之前不会开始。


-2
JavaScript 是一种异步语言。之所以称其为异步语言,是因为所有函数都基于事件执行,借助事件处理程序,我们无法确定事件何时触发。它可以是鼠标单击事件、加载事件等。但是函数的执行是按顺序进行的。只有在第一个函数执行后,第二个函数才会开始执行。 但请记住,JavaScript 是一种异步语言,这也是它被称为异步语言的原因。所以,回答您的问题,是的! :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接