这个回调函数如何理解?

function a(callback)   
{     
    callback();   
}   
function b(){   
alert("我是回调函数b");     
}   
a(b); 

上面是一个简单的回调函数的示例,我可以理解。
下面的代码中,将ligthOn,lightOff都称为回调函数,我一下想不通,请解释一下。

<html>
<head><title>使用JavaScript指定事件响应函数</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function lightOn()
{
    document.images[0].src = "eg_bulbon.gif";
}
function lightOff()
{
    document.images[0].src = "eg_bulboff.gif";
}
window.onload = function()
{
    document.images[0].onmouseover = lightOn;
    document.images[0].onmouseout = lightOff;
}
</script></head>
<body>
<img src="eg_bulboff.gif" />
</body></html>
阅读 3.7k
6 个回答
window.onload = function()
{
    document.images[0].addEventListener('mouseover',lightOn)
    document.images[0].addEventListener('mouseout',lightOff)
}

这样写就像了

这就要牵扯到异步编程的思想了。作为前端工程师,是比较擅长异步编程的,回调函数即是异步的最基础的实现方式。某个异步操作,如网络请求,文件操作API等调用,都会加入到事件循环机制当中,内部的线程池处理完毕后,派发事件,然后事件循环从事件队列当中取出执行,而作者指出的事件的原理也是如此。

一. 回调函数的传递方式(注册方式)不同
上例:是通过函数的参数传递的。
下例:是通过对象(具体到此例是事件源对象)的属性传递的。
二. 回调函数被调用的时机不同
上例:是同步调用的。
下例:是异步调用的。
三. 回调函数被调用的方式不同
上例:是被你自己的代码调用的,调用的地方一眼就能看到。
下例:不是被你自己的代码调用的,在哪里调用你看不到。在此例中,是被浏览器运行时环境内部调用的。

所以,上面的例子你很容易就理解了;而下面的例子不那么容易理解。

再次安利:彻底理解同步、异步和事件循环

回调函数简而言之,就是由你来实现, 然后特定条件下会被调用的函数

不用理解,简单就是把函数引用传入,然后在另外一个函数内部再重新调用,也许会出现调用时候的 context 问题,遇到再解决即可。

回调函数,其实都有一个共性,就是不是立即执行,而是稍后执行,稍后是什么时候?

定时器setTimout,你指定的时间之后执行;用户点击事件,用户触发事件的时候执行;都是稍后的

回调函数其实是一个概念,描述一个稍后执行的函数。你把它丢给计时器,函数参数,事件绑定,都是需要一个特定的条件触发其执行。

所以你的问题其实就是,函数 和 回调函数 分开理解了。其实就是一个函数,执行时间点不一样而已。只要稍后执行的,都可以称为回调函数。

ps:这个稍后执行的函数并没有官方的说话,只是用于理解。

推荐问题
宣传栏