标签:ajax 另一个 one == setter always 动态 并且 异步线程
在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数。
同步(阻塞)中使用回调的例子
var func1=function(callback){ //do something. (callback && typeof(callback) === "function") && callback(); } func1(func2); //fun1执行完后执行fun2 var func2=function(){ //fun2定义 }
异步回调的例子:
//ready函数中注册回调函数 $(document).ready(callback);
//ajax异步 $.ajax({ url: "test.html", context: document.body }).done(function() { $(this).addClass("done"); }).fail(function() { alert("error"); }).always(function() { alert("complete"); }); /** 注意的是,ajax请求确实是异步的,不过这请求是由浏览器新开一个线程请求,当请求的状态变更时,如果先前已设置回调,这异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。见:http://www.phpv.net/html/1700.html */
回调函数,一般在同步情境下是最后执行的,而在异步情境下有可能不执行,因为事件没有被触发或者条件不满足。
要将函数引用或者函数表达式作为参数传递。
$.get(‘myhtmlpage.html‘, myCallBack);//这是对的 $.get(‘myhtmlpage.html‘, myCallBack(‘foo‘, ‘bar‘));//这是错的,那么要带参数呢? $.get(‘myhtmlpage.html‘, function(){//带参数的使用函数表达式 myCallBack(‘foo‘, ‘bar‘); });
另外,最好保证回调存在且必须是函数引用或者函数表达式:
(callback && typeof(callback) === "function") && callback();
(函数执行完毕)“通知主线程”(回调)进行之后的流程。
js是怎样实现回调的?通过消息队列和事件循环。
参考
http://mao.li/javascript/javascript-callback-function/
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6888178.html有问题欢迎与我讨论,共同进步。
标签:ajax 另一个 one == setter always 动态 并且 异步线程
原文地址:http://www.cnblogs.com/starof/p/6888178.html