互联网公司面试题之小米公司前端

  笔者有几个正在走校招的朋友,通过近期跟他们的交流发现很多公司的面试前几轮的面试着重考察面试者对基础知识的掌握。有很多知识是必考的,也有一些偏门的,完全是看面试官的临场评估需求。像这次提到的小米前端校招,很多题是反复的考,例如:

  call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。

  当调用一个函数时,可以赋值一个不同的 this 对象。this 引用当前对象,即 call 方法的第一个参数。

  apply()语法与 call() 方法的语法几乎完全相同,唯一的区别在于,apply的第二个参数必须是一个包含多个参数的数组(或类数组对象)。

  apply的这个特性很重要,在调用一个存在的函数时,你可以为其指定一个 this 对象。

  使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。

  bind不会执行对应的函数,call或apply会自动执行对应的函数,只是返回对函数的引用。

  用call和apply方法,this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及以后的参数都是数组里面的元素,需要全部列举。例如:

  获取数组中的最大值和最小值,利用他们扩充作用域拥有Math的min和max方法;由于没有什么对象调用这个方法,所以第一个参数可以传null或者本身;

  bind与apply、call最大的区别就是bind不会立即调用,其他两个会立即调用;bind是返回对应函数,便于稍后调用,apply、call是立即调用;bind是新创建一个函数,然后把它的上下文绑定到bind()括号中的参数上,然后将它返回。例如:

  bind是只有点击button的时候,才会调用函数,而call和apply是立即调用,页面刷新就调用。

  当然还会有很多变体,像用apply实现bind,用原生js封装bind和apply方法,下面附上代码:

相关阅读