一段简单的JSONP,在百度中查询某个词:
<script>
function show(json){ // 定义回调函数show
alert(json.s);
}
</script>
<script src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=web&cb=show">
</script>
// 返回 show( { json数据 } )
如果说回调函数是一种具体的处理方式,比如W3school的定义:
callback 函数是一种以参数形式传递给另一个函数的函数。
出自:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_onreadystatechange...
在JSONP这个例子中,好像并没有体现出来这种“以参数形式传递给另一个函数的函数”。(个人见解,说错了请您指出,谢谢!)
或者,回调函数是一种处理问题的方式(个人见解,说错请指出!谢谢!):当某种条件满足了,就执行的那个函数。
Javascript中的回调函数,应该如何去理解呢?
“回调”是一种编程思想,“回调函数”是一个函数。
js里面回调主要两种方式体现:
一种是把函数本身当作一个参数传递,需要回调的之后直接执行,比如:
这里的回到函数cb本身被当作了一个参数传递个.click,发生click事件时cb本事被直接执行,因为函数本身被传递了,所有你的cb不需要是全局可见的。
另一种是把回调函数名称当作参数传递,需要回调的时候通过函数名执行,这种方式常见于跨域请求上,也就是你例子的jsonp,服务端通过你的回调函数名来构造一段对它进行调用的代码,比如你给的地址返回的是这段js:
这种方式下你的回调函数必须是全局的,不然返回的js里面没法调用到,如果你的show是一个局部的函数就会报错了。不过现在大部分的ajax框架都有了自动把你的局部回调函数包装成全局函数的功能,包装之后从开发者的视角上就看不出了。
补充一点,服务器是看不到你的js函数的,你没办法把函数传递给服务器回调,但你可以把函数名传递给服务器,让服务器知道请求完毕之后你想执行什么函数,然后把调用的js代码构造出来。
单讲“回调函数”,它的确就只是一个函数,不是用法也不是编程思想,如果考虑它是怎么被调用的才会有用法或者编程思想方面的讨论。