一段简单的JSONP,在百度中查询某个词:
// 返回 show( { json数据 } )
如果说回调函数是一种具体的处理方式,比如W3school的定义:
callback 函数是一种以参数形式传递给另一个函数的函数。
出自:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_onreadystatechange...
在JSONP这个例子中,好像并没有体现出来这种“以参数形式传递给另一个函数的函数”。(个人见解,说错了请您指出,谢谢!)
或者,回调函数是一种处理问题的方式(个人见解,说错请指出!谢谢!):当某种条件满足了,就执行的那个函数。
Javascript中的回调函数,应该如何去理解呢?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
“回调”是一种编程思想,“回调函数”是一个函数。
js里面回调主要两种方式体现:
一种是把函数本身当作一个参数传递,需要回调的之后直接执行,比如:
这里的回到函数cb本身被当作了一个参数传递个.click,发生click事件时cb本事被直接执行,因为函数本身被传递了,所有你的cb不需要是全局可见的。
另一种是把回调函数名称当作参数传递,需要回调的时候通过函数名执行,这种方式常见于跨域请求上,也就是你例子的jsonp,服务端通过你的回调函数名来构造一段对它进行调用的代码,比如你给的地址返回的是这段js:
这种方式下你的回调函数必须是全局的,不然返回的js里面没法调用到,如果你的show是一个局部的函数就会报错了。不过现在大部分的ajax框架都有了自动把你的局部回调函数包装成全局函数的功能,包装之后从开发者的视角上就看不出了。
补充一点,服务器是看不到你的js函数的,你没办法把函数传递给服务器回调,但你可以把函数名传递给服务器,让服务器知道请求完毕之后你想执行什么函数,然后把调用的js代码构造出来。
单讲“回调函数”,它的确就只是一个函数,不是用法也不是编程思想,如果考虑它是怎么被调用的才会有用法或者编程思想方面的讨论。
楼上说得对,其实你把函数也当成是一种变量就ok啦,
var callback = function(){};然后把这个变量当成参数,传递给别的函数,别的函数就可以对这个变量做任何操作,包括执行里面的语句,那这个函数类型的变量就被称为回调函数。所以说,回调函数跟普通函数没什么区别,只是传了给别人用,可以说是一种处理问题的方式,在异步操作横行的JavaScript里,也已经成为了一种编程思想了。
functions are first class.
it means that you can treat functions as normal variables.
callback functions are just a practise of first-class functions.
nothing to be special.
however, it's not a necessity to think functions as first class in order to use callback functions.
you could think callback functions as passing memory address of the entry, instead of function itself as an entity.
in brief, callback functions are both the way you think and the way you write code.
it is a false dichotomy that the way you think and the way it works should stand in opposition.
回调函数通常用在事件模型和异步调用中,它们可以看作是两种编程思想,回调函数是它们的具体用法之一。