您必须在函数中定义函数(即回调)。
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
被调用时,function2
使用单个参数调用一个新的无名函数,该函数接受一个obj
参数
console.log
调用匿名函数时,使用传递的值调用obj
- 声明一个
function2
接受单个参数的新函数callbackFn
callbackFn
使用单个参数调用传递的值,obj
我们从某个地方得到
所以申报顺序是1、4、2;执行顺序为 2、5、3。
*好吧,它们有点特别。它们的定义被提升,您可以执行它们所代表的代码,它们的声明创建范围和闭包。但这些都是另一个问题。