为何忽然想说bind函数,仍是要多亏了上周二的三次面试。提及面试我可能就要多话几句,其实面试也是一个至关消耗体力与脑力的运动。因此面试前睡个好觉,吃顿饱餐,能够说是成功了一半。还有一半可能就要靠你平时的积累与发挥。css
在上周的面试中,每次面试官都有提到bind函数,万万没想到,bind函数的出现率竟然如此高!html
我虽知道bind函数的用法可是并无细致的去研究和揣摩过bind函数。因此...react
虽然说技术面中一道题不会致你余死地,但也会下降你在技术领域高大而宏伟的形象,面试官或许会在心中暗想这娃不行。git
本文我主要根据面试时候遇到的题目,总结为如下2个问题github
1.bind和apply(call)最根本的区别是什么面试
2.在ES5以前手写实现bind函数bash
若是小伙伴早知熟知这两个问题,能够浏览下一朋友正在筹划中的 面试汇总库app
闲事少管,走路陈展。开始正题。函数
我相信大多数朋友都深入的知道call,apply是参数列表的不一样。但今天重点是说明ui
bind()方法建立一个新的函数,在调用时设置this关键字为提供的值
apply() 方法调用一个具备给定this值的函数
关键在于bind函数建立了一个新的函数而且这个新的函数执行上下文不会再变
一位码农是一个函数,他的女票就是他的对象
情比金坚,至死不渝的码农 = 码农.bind(对象)
而使用apply,call更像是我今天喜欢你,明天喜欢他,后天隔壁家的王喇叭,可是基本上是单相思对方都不一样意,因此都没能产生结果。
// 面试中回答的方法,也是mdn文档提供的方法
Function.prototype.bind2 = function (context) {
if (typeof this !== "function") {
throw new Error("Function.prototype.bind - what is trying to be bound is not callable");
}
var self = this;
var args = Array.prototype.slice.call(arguments, 1);
var fNOP = function () {};
var fBound = function () {
var bindArgs = Array.prototype.slice.call(arguments);
return self.apply(this instanceof fNOP ? this : context, args.concat(bindArgs));
}
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
}
复制代码
若是个人文章对你有帮助,我也但愿可以获得你的鼓励,由于你的鼓励是我前进的动力。