回调函数语法 - 为什么不允许这样做?

Callback function syntax - why is this not allowed?

function callbackFn(res){console.log(res)}

我会写 $.get("./a", function(response) {callbackFn(response)});

为什么我不能写 $.get("./a", callbackFn(response));

第二个版本立即调用 callbackFn(),并使用它的 return 值作为 $.get() 的第二个参数。相当于

var temp = callbackFn(response):
$.get("./a", temp);

您需要将它包装在一个匿名函数中,这样它就不会立即被调用,而是在 $.get 完成 AJAX 请求时被调用。

只需将函数reference传给$.get()

$.get("./a", callbackFn)

演示

function handleResponse(data) {
  console.log('response data:\n', data);
}

$.getJSON('https://jsonplaceholder.typicode.com/todos/1', handleResponse)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Functions是javascript中的值,特殊对象是你会的。

当你定义一个像

这样的函数时
function callbackFn(res) {
  console.log(res)
}

callbackFn 引用函数本身并且 callbackFn() 执行 调用 函数并获得值这个函数 returns.

您显示的方法需要 string 作为第一个参数,function 作为第二个参数。

所以如果你这样做:

$.get("./a", callbackFn(response));

您正在向 $.get 传递使用参数 response 调用函数的 return 值(即 callbackFn(response))。

为了更清楚,这样的方法是这样定义的(这是一个例子,不是实际的实现)

function get(path, callback) {
  fetch(path).then(function (response) {
    callback(response)
  })
}

如您所见,在 get 中,它正在调用预期作为第二个参数的函数,并带有参数响应(您的 callbackFn)。