javascript的call(),apply(),bind()与回调:

1.call(), apply()方法:


JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单的说就是改变函数执行的上下文,这是最基本的用法。

例子:
function callSum1(num1, num2){
 return sum.apply(this, arguments); // 传入arguments 对象
}
function callSum2(num1, num2){
 return sum.apply(this, [num1, num2]); // 传入数组

两个方法基本区别在于传参不同(下次再详细记录)。

2.bind()方法,回调函数:


call() 也好, apply() 也好,都是立马就调用了对应的函数,而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,第一个参数也是绑定 this 的值,后面接受传递给函数的不定参数。 
bind() 生成的新函数返回后,你想什么时候调就什么时候调.(相当于是定义,还没被调用)
MyClass* myclass = new MyClass;
base::Bind(&MyClass::Foo, base::Owned(myclass));

回调函数具体的定义为:在JavaScript中,函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
回调函数的使用场合:
-资源加载:动态加载js文件后执行回调,加载iframe后执行回调,ajax操作回调,图片加载完成执行回调,AJAX等等。
-DOM事件及Node.js事件基于回调机制(Node.js回调可能会出现多层回调嵌套的问题)。
-setTimeout的延迟时间为0,这个hack经常被用到,settimeout调用的函数其实就是一个callback的体现
-链式调用:如果要实现链式方法,可以用回调函数来实现
setTimeout、setInterval的函数调用得到其返回值。由于两个函数都是异步的,即:他们的调用时序和程序的主流程是相对独立的,所以没有办法在主体里面等待它们的返回值,所以用return已经没有意义,只能使用callback。callback的意义在于将timer执行的结果通知给代理函数进行及时处理。

总结:

Callback:对函数的闭包封装
Bind:对Callback的便捷封装,Bind就是返回Callback对象。

猜你喜欢

转载自blog.csdn.net/qq_22881435/article/details/83316971