回调函数语法 - 为什么不允许这样做?
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)。
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)。