2014-10-28 3 views
3

У меня есть следующий JS код:Являются ли функции javascript синхронными или асинхронными?

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

Я хочу, чтобы убедиться, что second() будет работать после полного исполнения first(). Это ожидаемое поведение по умолчанию?

+0

Не быстрее попробовать и посмотреть (или хорошо ... проверить спецификации JS? Если бы это было не так, то это большая разница с языками 99,99% там, тогда хорошо выделенные в документе) ... –

ответ

5

Это зависит от того, что вы имеете в вашей first() и second() функции .. если у вас есть какие-то асинхронные вызовы, first() может закончиться после second().

Например

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

first(); 
second(); 

напечатает

Я первый

Я второй

Теперь предположим, что у вас есть вызов Ajax в вашей first() функции который занимает 10 секунд до конца:

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

при запуске

first(); 
second(); 

вы напечатали

Я второй

Я первый

Here вы можете найти другой exampl e

+0

это ясно сейчас .. очень много :) да, у меня есть звонки AJAX. поэтому я должен запустить вторую функцию в качестве ответа на первый :) –

1

Да, это ожидаемое поведение. Вы можете также определить некоторые асинхронные функции, такие как вызовы 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.

-1

Javascript является асинхронным языком.Причина, по которой они называют это асинхронным языком, является причиной того, что все функции выполняются на основе событий, с помощью обработчиков событий, и мы действительно не можем быть уверены, когда будут срабатывать события. Это может быть событие щелчка мыши, событие загрузки и т. Д. Однако выполнение функций происходит последовательно. Только после выполнения первой функции произойдет второй запуск. Но имейте в виду, что Javascript - это асинхронный язык и почему он так называется. Поэтому, чтобы ответить на ваш вопрос, да! :)

Смежные вопросы