javascript函数调用是如何工作的?

javascript函数调用是如何工作的?,javascript,Javascript,我有以下代码: 它对URL进行GET调用,获取一些对象,并将图像附加到HTML标记 function getDataFromApi(searchTerm, callback) { const URL1 = `some url`; const design = { url: URL1, data: { "dog breed name": searchTerm }, type: 'GET', success: callback };

我有以下代码: 它对URL进行GET调用,获取一些对象,并将图像附加到HTML标记

function getDataFromApi(searchTerm, callback) {
  const URL1 = `some url`;

  const design = {
    url: URL1,
    data: {
      "dog breed name": searchTerm
    },
    type: 'GET',
    success: callback
  };
  $.ajax(design);
}

function displaySearchData(data) {
  const allResultsLength = data.message.length;
  const ranNum = Math.floor(Math.random() * allResultsLength);
  const dogResults = data.message[ranNum];
  $(`.js-search-results`).html(`<img src = ${dogResults}>`);
}

function watchSubmit() {
  $('.js-search-form').submit(event => {
    event.preventDefault();
    let queryTarget = $(event.currentTarget).find('.js-query');
    let query = queryTarget.val();
    queryTarget.val("");
    getDataFromApi(query, displaySearchData);
  });
}

$(watchSubmit);
函数getDataFromApi(searchTerm,回调){ const URL1=`some url`; 常数设计={ url:URL1, 数据:{ “犬种名称”:搜索术语 }, 键入:“GET”, 成功:回调 }; $.ajax(设计); } 函数displaySearchData(数据){ const allResultsLength=data.message.length; const ranNum=Math.floor(Math.random()*allResultsLength); const dogfresults=data.message[ranNum]; $(`.js搜索结果`).html(`); } 函数watchSubmit(){ $('.js搜索表单')。提交(事件=>{ event.preventDefault(); 让queryTarget=$(event.currentTarget.find('.js query'); let query=queryTarget.val(); queryTarget.val(“”); getDataFromApi(查询、显示搜索数据); }); } $(提交); 我获取
getDataFromApi
watchSubmit
但是
getDataFromApi(查询,显示搜索数据)对我来说一点都不直观。
我一直在编写Java,在没有参数的情况下如何调用
displaySearchData
对我来说毫无意义-似乎行应该是
getDataFromApi(query,displaySearchData(data))


有人能解释一下这是如何在javascript中编译和执行的(基本上这是一种合法的语法吗?

您需要查看的是函数getDataFromApi()

在该函数中,有一个“callback”参数。此参数稍后添加到$.ajax中。这是一个jQuery函数,当某个条件匹配时(比如在发送请求之前,当收到响应时,…),它将提供一些回调。这个$.ajax回调为您提供了3个参数,其中一个是数据(正在使用)、textStatus和jqXHR。通常,您只需要注意数据,因为它包含您请求数据的响应

因此,$.ajax成功后,将调用“callback”函数,即displaySearchData。由于$.ajax callback为您提供了数据参数,您可以将它们添加到displaySearchData的参数中。请注意,如果需要,您可以添加额外提供的2个参数


您可以在此处查看该函数:

在good'ol jquery中的某个地方,有一段代码:

$.ajax = function(config){
    ...
    // get the response from XHR request, 
    // and save it in, say, 'response'
    ...
    // now check, if the response is OK 200 
    // and if so, execute next line
    // which is basically - calling your displaySearchData method
    config.success(response);
    ...
}
现在,
config
是您的
design
对象,它有一个属性
success
,其中包含对
displaySearchData
方法的引用

方法
displaySearchData
data
参数现在将携带对方法调用
config.success(response)
中传递的变量
response
的引用

EDIT:参数
callback
还将方法
displaySearchData
的引用转发到
getDataFromApi

需要注意的概念:

函数可以在Javascript中作为参数传递给另一个函数,在这种情况下,我们只需要引用变量作为参数传递。不需要调用括号
()

function A(data){...};

function b(referenceToFunctionA){
    ...
    referenceToFunctionA(someData);
    ...
}; 
// correct
b(A);

// wrong, because adding () after any function reference variable
// invokes the method immediately.
// in this particular case the returned value of the method A
// is passed as argument instead of the reference to method A itself.
b(A());

欢迎使用JavaScript,我的朋友。当你继续使用JS时,准备好体验更多神奇的怪异。祝你好运。

好了,
displaySearchData
在你的API中被调用
success:callback
。你正在将一个
函数
传递给
另一个函数
,然后让
另一个函数用它想做什么就做什么it@FaizuddinMohammed我想这是我对javascript不了解的部分。因此,如果它被作为回调调用,那么您不需要参数?在本例中,回调是一个函数,即您传递的函数。现在,您再次将它传递给
$.ajax
success
键。现在它是它可以在函数需要时调用函数。它还可以为函数提供参数。这种编程风格允许您具有异步性质。有点像这样说:
当您从ajax获取数据后,这是您将执行的函数-传递它,无论您想要什么,我都会处理它。
@Faizudd在Mohammed中,如果我没有$.ajax,我是否需要一些东西来传递到
displaySearchData