[JS-Flow]JavaScriptコールバック関数
9755 ワード
この文章はCore JavaScript特別講座の内容をまとめた.
サマリ
コールバック関数フィーチャー
コールバック関数(B)を別の関数(A)のパラメータで渡すと、AはBの制御権を持つ.
(特別な要求(bind)がない限り、予めAに指定された方法でBを呼び出す.
予め決定された方法は、コールバックがいつ呼び出されるか、パラメータにどの値を指定するか、ここで何をバインドするかを含む.
コールバックは関数です.
メソッドに変換しても、関数の定義を超えているだけです.方法のように使われているわけではありません.このバインドは、メソッド呼び出し元ではなくコールバック関数を使用する関数に完全に依存します.
デフォルトでは、コールバック関数のthisはwindow/global(グローバルオブジェクト)です.
呼び出された関数にコールバック関数の制御権がありますか?
1.コールバック関数の「運転点」制御
var cb = function() {
console.log('1초마다 실행 된다.');
};
setInterval(cb, 1000);
setInterval関数は1秒ごとにコールバック関数を実行し、いつ実行するかを制御します.2.コールバック関数「パラメータ」の制御
var arr = [1, 2, 3, 4, 5];
var entries = [];
arr.forEach(function(v, i) {
entriese.push([i, v, this[i]]);
}, [10, 20, 30, 40, 50]);
console.log(entries)
forEach関数では、1番目のパラメータをコールバック関数とし、2番目のパラメータはthisArgを受け入れます.コールバック関数は、arrの値として最初のパラメータ、arrのインデックスとして2番目のパラメータを使用します.
3.コールバック関数の「this」制御
document.body.innerHTML = '<div id="a">abc</div>';
function cbFunc(x) {
console.log(this, x);
}
document.getElementById('a').addEventListner('click', cbFunc);
$('#a').on('click', cbFunc);
addEventLister関数は、コールバック関数のこれをaddEventListerを呼び出す要素として定義します.コールバック関数のパラメータをevent要素に渡すことも定義されています.
4.注意-コールバックは関数です。
var arr = [1, 2, 3, 4, 5];
var obj = {
vals: [1, 2, 3],
logValues: function(v, i) {
if(this.vals) {
console.log(this.vals, v, i);
} else {
console.log(this, v, i);
}
}
};
obj.logValues(1, 2); // this는 obj가 된다.
arr.forEach(obj.logValues); // this는 window가 된다.
コールバック関数はwindow/globalで、制御権のある関数が指定しない限りです.Reference
この問題について([JS-Flow]JavaScriptコールバック関数), 我々は、より多くの情報をここで見つけました https://velog.io/@younoah/JS-Flow-자바스크립트-콜백함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol