JavaScript中函数绑定实现的问题
PHP中文网
PHP中文网 2017-04-11 09:03:25
[JavaScript讨论组]

我看到的实现函数绑定环境的方法是:

function bind(fn,context){
    return function(){
        return fn.apply(context,arguments);
    }
}

我对这个闭包很疑惑,如果不搞闭包,直接:

function bind(fn,context){
    return fn.apply(context);

}

不也是能实现绑定吗,设置我连bind函数也不要,在需要绑定的时候直接写:

 fn.apply(context);

所以这个闭包的作用是什么,除了方便传参,还有什么特殊的作用吗?
先谢过大家了。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
高洛峰

首先,你要分清楚函数的定义和执行

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 是另一个函数
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号