関数内で関数 (つまり、コールバック) を定義する必要があります。
1 function function1(){
2 function2(function(obj) {
3 console.log(obj); //logs obj.
});
}
4 function function2(callbackFn){
//do stuff with DB and get obj
console.log(obj); //logs obj.
5 callbackFn(obj);
}
function2
だけでなく、一度に多くの場所から呼び出すことができますfunction1
。
わからないことを具体的に教えていただければ、より適切な回答が得られる可能性があります。
関数は、数値、文字列、オブジェクトと同様に値です。
これは、関数型プログラミングのコアとなる基本であり、おそらくあなたがまだ理解していないことです。JavaScript では、多くの言語と同様に、関数は特別なものではありません*。これは、関数/メソッドがコードで扱う通常の値とは異なる C や Java などの言語とは異なります。
2; // Here is a number
var a = 2; // I can assign it to a variable
console.log(2); // I can pass it as a function argument
function() {} // Here is a function
var a = function() {}; // I can assign it to a variable
console.log(function() {}); // I can pass it as a function argument
function jim() {} // This function's name is jim
var a = jim; // I can assign it to a variable
console.log(jim); // I can pass it as a function argument
(function() {})(); // I can call a function without giving it any names
jim(); // I can call a named function
a(); // I can call a function via a variable
jim.call(this, arg1); // Or I can get complicated
したがって、関数を宣言して、それらを呼び出すために個別に渡すことができます。さて、私たちが始めたコードはどうでしょうか。
function1
引数を取らない新しい関数を宣言する
- が
function1
呼び出されると、引数を 1 つ指定して呼び出す、引数function2
を取る新しい名前のない関数obj
- 匿名関数が呼び出されるとき、
console.log
渡された値で呼び出しますobj
function2
単一の引数を取る新しい関数を宣言するcallbackFn
- 渡された値を
callbackFn
単一の引数で呼び出します。obj
どこかから取得しました
したがって、宣言の順序は 1、4、2 です。実行順序は 2、5、3 です。
*OK、それらは少し特別です。それらの定義は巻き上げられ、それらが表すコードを実行でき、それらの宣言はスコープとクロージャーを作成します。しかし、それらはすべて別の機会に質問します。