[Async]callback


同期、非同期、callback


Javascript is synchronous.


Execute the code block by orger after hoisting


JavaScriptは同期言語です
すなわち、ブートされてから、コードは記述された順序で同期して実行される.
hoisting :
var、function declaration、すなわちvar変数と関数宣言自動上向きの最初の

シンクロ運転




1 2 3順に出力されている

同期(非同期)運転


a synchronous


コードがいつ非同期で実行されるか予測できません
良い例はsetTimeoutです

setTimeout


ブラウザが提供するAPI時間が経過すると、定義したコールバック関数が呼び出されます.
var timeoutID = window.setTimeout(code[, delay]);
window.setTimeout(function, milliseconds);```
パラメータ
  • func
    functionは、タイマの期限切れ後に
  • を実行する.
  • code
    オプションの構文を使用して、文字列を関数に置き換えることができます.これは、タイマが期限切れになった後に説明および実行されます.
    eval()を使用するセキュリティリスクと同じため、この構文は推奨されません.
  • delay Optional
    タイマは、指定した関数またはコードを実行する前に待機するミリ秒(千分の一秒)を実行します.
    このパラメータを省略すると、0を値として使用すると、実際の遅延が長くなる可能性があります.
  • param1, ..., paramN Optional
    タイマが期限切れになりfuncの他のパラメータ
  • に渡される
    戻り値
    返されるtimeoutIDは数値です.
    settimeout()を呼び出して作成されたタイマを識別するゼロ以外の値.
    この値はWindowTimersで、タイマーをキャンセルします.cleartimeout()に転送することもできます.
    settimeout()とsetInterval()は同じID空間を共有する.
    clearTimeout()を使用してもclearInterval()を使用しても、技術的には同じです.
    しかし、明確にするためには、混乱を避けるために、コードを維持する際に常に一致しなければならない.


    1,3が出力され、1秒後に2が出力されていることがわかります.
    JavaScriptのコードの説明
    JAvascriptエンジンは、コードを上部から下に解析します.

  • コンソールで彼に会って、1を印刷してから1を印刷するように要求されたメッセージを受け取りました.

  • 次の行でsettimeout(ブラウザAPI)に遭遇し、ブラウザに
    所定の時間内にその内容を実行することを要求する.
    ブラウザAPIは、常に最初にブラウザに要求を送信します.
    その後、応答を待たずに次の行に進みます.

  • 3行目のコンソール.log(「3」)を出力します.

  • さっき要求した2秒後にlog(「2」)を出力します.
  • callback


    Synchronous callback


    同期関数の宣言と実行
    //Synchronous callback
    function printImmediately(print) {
      print();
    }
    
    printImmediately(() => console.log('hello'));


    1、3 hello、2の順で出力
    JavaScriptのコードの説明
    1.호이스팅으로 인해서 
    function printImmediately(print) {
      print();
    } 가 선언이 되었고 2.console.log(1)을 출력합니다 그 다음
    3.setTimeout을 실행해서 브라우저에게 요청합니다, 역시 응답을 기다리지않고
    4.console.log(3)을 출력합니다
    5.그리고 printImmediately()함수가 실행되고
    마지막에 아까 요청했던 setTimeout함수가 실행됩니다

    Asynchronous callback


    今回は非同期関数を宣言して実行します.
    //Asynchronous callback
    function printWithDelay(print, timeout) {
      setTimeout(print, timeout);
    }
    
    printWithDelay(()=> console.log('async callback'), 2000);


    1、3、hello、2、asyc callback順に出力
    JavaScriptのコードの説明
    1.호이스팅으로 인해서 
    function printImmediately(print) {
      print();
    } 가 선언이 되었고,
    2.
    function printWithDelay(print, timeout) {
      setTimeout(print, timeout);
    }가 선언되고 3.console.log(1)을 출력합니다
    4.setTimeout()함수가 브라우저에게 요청하고, 역시 응답을 기다리지않고
    5.console.log(3)을 출력합니다 그 다음
    6.printImmediately()함수를 실행하고 hello를 출력하고
    7.printWithDelay()함수가 브라우저에게 요청합니다 
    응답을 기다리지않고, 아까 요청했던 setTimeout() 함수의
    8.console.log(2)를 출력합니다
    9.그리고 요청했던 printWithDelay()함수가 실행되서
    asyc callback이 출력되었습니다