浅谈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实现ASP分页函数 HTML分页函数
Sep 22 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
JavaScript实现列出数组中最长的连续数
Dec 29 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
vue动态改变背景图片demo分享
Sep 13 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
微信小程序实现手指拖动选项排序
Apr 22 Javascript
微信小程序实现下拉加载更多商品
Dec 29 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
将数组写入txt文件 var_export
2009/04/21 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
用python找出那些被“标记”的照片
2017/04/20 Python
python中logging库的使用总结
2017/10/18 Python
django实现用户注册实例讲解
2019/10/30 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
优秀员工自荐书范文
2013/12/08 职场文书
大学校庆策划书
2014/01/31 职场文书
入职担保书范文
2014/05/21 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
房产公证书格式
2015/01/26 职场文书
优秀志愿者感言
2015/08/01 职场文书
2016年记者节感言
2015/12/08 职场文书