JavaScript中函数绑定实现的问题
本文介绍了JavaScript中函数绑定实现的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我看到的实现函数绑定环境的方法是:
function bind(fn,context){
return function(){
return fn.apply(context,arguments);
}
}
我对这个闭包很疑惑,如果不搞闭包,直接:
function bind(fn,context){
return fn.apply(context);
}
不也是能实现绑定吗,设置我连bind函数也不要,在需要绑定的时候直接写:
fn.apply(context);
所以这个闭包的作用是什么,除了方便传参,还有什么特殊的作用吗?
先谢过大家了。
解决方案
首先,你要分清楚函数的定义和执行
function bind(fn,context){
return function(){
return fn.apply(context,arguments);
}
}
这种情况下 var x = bind(func, obj);
得到的 x
是一个函数,它是可以无限次执行 x()
的。
然后,
function bind(fn, context){
return fn.apply(context);
}
这个 bind
会直接执行 fn
,返回的是执行的结果,而不是一个函数。
所以呢,它们的区别就在于,一个是定义了一个函数返回,一个是直接执行的函数。
不过 bind 在 JavaScript 中已经内置为 function 对象的方法了,所以你可以直接用
var f = fn.bind(context);
// 其中 fn 是一个函数,得到的 f 是另一个函数
这篇关于JavaScript中函数绑定实现的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文