Javascript函数绑定的详细解释

复制代码代码如下所示:




var处理程序{
消息:事件处理。
HandlerFun:函数(){
警报(此消息);
}
};

document.getelementbyid('btntest)。Onclick = handler.handlerfun;



上面的例子中创建了一个对象,该handler.handlerfun()方法被分配到DOM的按钮的单击事件处理程序的设计意图是这样的:当我们点击按钮来触发方法,弹出的对话框显示定义的处理程序的信息,但在点击对话框中的内容是不确定的。学生熟悉的闭包可以很容易地看到,问题不在于保持handler.handlerfun执行环境()方法,这个对象最后指出,而不是处理DOM按钮。您可以使用闭包来解决这一问题,结合语句修改的功能
复制代码代码如下所示:
document.getelementbyid('btntest)。Onclick =函数(){
Handler.handlerFun();
}

这样我们就能得到预期的结果。该解决方案直接调用handler.handlerfun()方法在一个onclick程序使用闭包,这是,当然,解决这种情况。创建多个闭包会使代码难以理解和调试。


自定义绑定功能
复制代码代码如下所示:
函数绑定(FN,上下文){
返回函数(){
返回fn.apply(语境参数);
};
}

document.getelementbyid('btntest)。Onclick =绑定(handler.handlerfun,处理程序);

函数可以通过自定义绑定函数绑定到指定的环境。函数的作用是:一个绑定函数、一个执行环境和一个在执行环境中调用绑定函数的函数,看起来很简单,但是它的功能非常强大。在Bing()中,创建闭包。关闭采用()调用输入函数,提出申请()为执行环境和参数,参数是内部的匿名函数而不是绑定()。当返回的函数被调用时,它执行传入的函数在给定的函数给出的所有参数。在上面的例子中,呼叫handler.handlerfun仍然可以得到参数的事件,因为所有的参数都是由结合功能传递给它的。

总结

一旦一个函数指针的函数传递的功能,必须在一个特定的环境中进行的,自定义(绑定)功能可以使用,它们主要用于事件处理程序和setTimeout和setInterval,然而,这种结合模式,相比普通的功能需要更多的内存开销,所以尽量只在必要的时候当使用。