- 函数:function(){}
- function是声明;()函同含,包含的意思,包含某个变量;{}函数体。
- 匿名函数:function(x){echo x+1};
- 给函数起个名字:function A(x){echo x+1;}
- 把它赋值给一个变量: a = function(x){echo x+1;}
- 函数调用:function(x){echo x+1}(5)、A(5)、a(5)
----------------------------------------------------------------------------------------------------------------------
了解这些之后,看个ajax是如何回调的
$.ajax({
url: '',
success: function(response) {
console.log(response)
},
});
很多小伙伴很疑惑,这个response是如何返回来的,实际并不是返回来的。
我们来看jquery文件
$.ajax = function(x,y){...}
因此$.ajax是一个匿名函数,怎么调用匿名函数? ==$.ajax(1,2)
即function(x,y){...}( 1, 2 )
相当于以下代码:
var url = ' ' ; var success = function(response) { alert(response) } ;
$.ajax( url , success );
$.ajax被调用
function(url,success){
//发起ajax请求
//得到结果data
//调用success函数
success(data)
即function(response) {console.log(response)}(data)
//打印出data
}
----------------------------------------------------------------------------------------------------------------------
附录:以post为例,模拟jq里的封装
----------------------------------------------------------------------------------------------------------------------
跨域请求,比如ajax的jsonp跨域,也是这个道理,首先声明一个函数
function callback(msg) {
alert(msg);
}
用script标签的src可以跨域的特点,<script src="http://.../kuayu.php?fn=callback"></script>
服务器代码:
$fn=$_GET['fn']; $str='hello'; echo $fn."('$str')"; //返回字符串 callback('hello') 于是就执行了callback(msg)函数。