我敢肯定有一个话题,但是对于我一生来说,我找不到它。我知道这是一个经典问题,如果这个问题是重复性的,那么我感到抱歉,但是我所阅读的文章/主题中没有一个解决我这个看似很明显的问题。
考虑此示例
function serverRequest(query, callback){
setTimeout(function(){
var response = query + "full!";
callback(response);
},5000);
}
function getResults(results){
console.log("Response from the server: " + results);
}
serverRequest("The glass is half ", getResults);
此代码段完全按照其应有的方式工作。但是,作为对回调概念不熟悉的人,为什么我们可以跳过{并以正常方式调用它时,将getResults
作为参数传递?
function serverRequest(query){
setTimeout(function(){
var response = query + "full!";
getResults(response);
},5000);
}
function getResults(results){
console.log("Response from the server: " + results);
}
serverRequest("The glass is half ");
根据我的测试,第二个片段非常完美,不需要传递函数作为回调。我到底在这里想念什么?
答案 0 :(得分:3)
出于与向setTimeout
传递函数相同的原因。
因此,您可以重用serverRequest
的逻辑,而无需对其产生的数据进行硬编码。
答案 1 :(得分:2)
答案简短?除非您拥有10000个函数,否则全局范围内的函数都可以使用。
通常,您根本不想在全局范围内放置任何内容,以避免命名冲突等。因此,通常不考虑全局范围。
回调并不好,所有很酷的孩子都使用Promises。
function serverRequest(query) {
return new Promise(function (resolve) {
setTimeout(function(){
var response = query + "full!";
resolve(response);
},5000);
});
}
serverRequest("The glass is half ").then(function (results) {
console.log("Response from the server: " + results);
});
答案 2 :(得分:1)
因为第一个示例使其可重用,所以如果要切换getResults的行为并改为调用其他函数。