浅谈JS中的bind方法与函数柯里化


Posted in Javascript onAugust 10, 2016

绑定函数bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定。

关于这个特性看《JS权威指南》原文的例子:

var sum = function(x,y) { return x + y }; 

var succ = sum.bind(null, 1); //让this指向null,其后的实参也会作为实参传入被绑定的函数sum

succ(2); // => 3: 可以看到1绑定到了sum函数中的x

其次, bind()方法所返回的函数的length(形参数量)等于原函数的形参数量减去传入bind()方法中的实参数量(第一个参数以后的所有参数),因为传入bind中的实参都会绑定到原函数的形参,举个例子:

function func(a,b,c,d){...} //func的length为4

var after = func.bind(null,1,2); //这里输入了两个实参(1,2)绑定到了func函数的a,b

console.log(after.length); //after的length为2

第三,当bind()所返回的函数用作构造函数的时候, 传入bind()的this将被忽略,实参会全部传入原函数,这样说很抽象,举个例子:

function original(x){
 this.a = 1;
 this.b = function(){return this.a + x}
}
var obj={
 a = 10
}
var newObj = new(original.bind(obj, 2)); //传入了一个实参2

console.log(newObj.a); //输出1, 说明返回的函数用作构造函数时obj(this的值)被忽略了
console.log(newObj.b()); //输出3 ,说明传入的实参2传入了原函数original

以上就是ES5中bind方法的特性, 这种技术也被称为函数柯里化。这种技术将多个参数的函数变成只带一个参数的函数。bind方法就是该技术在js中的实践。

关于这篇浅谈JS中的bind方法与函数柯里化就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS连连看源码完美注释版(推荐)
Dec 09 Javascript
JS实现模仿微博发布效果实例代码
Dec 16 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
详解JavaScript基本类型和引用类型
Dec 09 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 #Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 #Javascript
基于JavaScript实现树形下拉框
Aug 10 #Javascript
关于原生js中bind函数的简单实现
Aug 10 #Javascript
Mvc提交表单的四种方法全程详解
Aug 10 #Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 #Javascript
浅谈JS运算符&&和|| 及其优先级
Aug 10 #Javascript
You might like
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php生成图片验证码的方法
2016/04/15 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
python中使用PIL制作并验证图片验证码
2018/03/15 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python正则表达式和元字符详解
2018/11/29 Python
python selenium firefox使用详解
2019/02/26 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
python删除某个目录文件夹的方法
2020/05/26 Python
python可以用哪些数据库
2020/06/22 Python
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
社区服务理念口号
2015/12/25 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
MySQL中order by的使用详情
2021/11/17 MySQL
对象析构函数__del__在Python中何时使用
2022/03/22 Python