call(apply)边边站,bind函数才好看

为何忽然想说bind函数,仍是要多亏了上周二的三次面试。提及面试我可能就要多话几句,其实面试也是一个至关消耗体力与脑力的运动。因此面试前睡个好觉,吃顿饱餐,能够说是成功了一半。还有一半可能就要靠你平时的积累与发挥。css

在上周的面试中,每次面试官都有提到bind函数,万万没想到,bind函数的出现率竟然如此高!html

我虽知道bind函数的用法可是并无细致的去研究和揣摩过bind函数。因此...react

虽然说技术面中一道题不会致你余死地,但也会下降你在技术领域高大而宏伟的形象,面试官或许会在心中暗想这娃不行。git

本文我主要根据面试时候遇到的题目,总结为如下2个问题github

1.bind和apply(call)最根本的区别是什么面试

2.在ES5以前手写实现bind函数bash

若是小伙伴早知熟知这两个问题,能够浏览下一朋友正在筹划中的 面试汇总库app

闲事少管,走路陈展。开始正题。函数

1.bind和apply(call)最根本的区别是什么


我相信大多数朋友都深入的知道call,apply是参数列表的不一样。但今天重点是说明ui

bind()方法建立一个新的函数,在调用时设置this关键字为提供的值

apply() 方法调用一个具备给定this值的函数

关键在于bind函数建立了一个新的函数而且这个新的函数执行上下文不会再变

一位码农是一个函数,他的女票就是他的对象

情比金坚,至死不渝的码农 = 码农.bind(对象)

而使用apply,call更像是我今天喜欢你,明天喜欢他,后天隔壁家的王喇叭,可是基本上是单相思对方都不一样意,因此都没能产生结果。

2.在ES5以前手写实现bind函数

// 面试中回答的方法,也是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;
}

复制代码

若是个人文章对你有帮助,我也但愿可以获得你的鼓励,由于你的鼓励是我前进的动力。

相关文章
相关标签/搜索