[Async]callback
9251 ワード
同期、非同期、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);```
パラメータ
var timeoutID = window.setTimeout(code[, delay]);
window.setTimeout(function, milliseconds);```
functionは、タイマの期限切れ後に
オプションの構文を使用して、文字列を関数に置き換えることができます.これは、タイマが期限切れになった後に説明および実行されます.
eval()を使用するセキュリティリスクと同じため、この構文は推奨されません.
タイマは、指定した関数またはコードを実行する前に待機するミリ秒(千分の一秒)を実行します.
このパラメータを省略すると、0を値として使用すると、実際の遅延が長くなる可能性があります.
タイマが期限切れになり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이 출력되었습니다
Reference
この問題について([Async]callback), 我々は、より多くの情報をここで見つけました
https://velog.io/@feelslikemmmm/Asynccallback
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
//Synchronous callback
function printImmediately(print) {
print();
}
printImmediately(() => console.log('hello'));
1.호이스팅으로 인해서
function printImmediately(print) {
print();
} 가 선언이 되었고 2.console.log(1)을 출력합니다 그 다음
3.setTimeout을 실행해서 브라우저에게 요청합니다, 역시 응답을 기다리지않고
4.console.log(3)을 출력합니다
5.그리고 printImmediately()함수가 실행되고
마지막에 아까 요청했던 setTimeout함수가 실행됩니다
//Asynchronous callback
function printWithDelay(print, timeout) {
setTimeout(print, timeout);
}
printWithDelay(()=> console.log('async callback'), 2000);
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이 출력되었습니다
Reference
この問題について([Async]callback), 我々は、より多くの情報をここで見つけました https://velog.io/@feelslikemmmm/Asynccallbackテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol