美文网首页
call和apply的区别和作用?那个性能会好些?

call和apply的区别和作用?那个性能会好些?

作者: 皇甫贝 | 来源:发表于2020-06-10 18:03 被阅读0次

    每个函数都包含两个非继承而来的方法:apply()call()
    callapply都属于Function.prototype的一个方法,所以每个function实例都有callapply属性;

    作用

    call()方法和apply()方法的作用相同:改变this指向;一样改变 this 的还有 bind,bind并没有立即执行函数,只是预先把处理改变函数中的 this

    区别

    他们唯一的区别就是传参的不同:
    call():第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。在使用call()方法时,传递给函数的参数必须逐个列举出来。

    apply():传递给函数的是参数数组

    function AddFun(c, d){ 
        return this.age1 + this.age2 + c + d; 
    } 
    var Object = {age1:5, age2:10}; 
    AddFun.call(Object, 1, 2); // 5 + 10 + 5 + 7 = 16 
    AddFun.apply(Object, [10, 20]); // 1 + 3 + 10 + 20 = 34 
    

    性能问题:

    call 的性能要比 apply 好一些(尤其是传递给函数的参数超过三个的时候)

      let arr = [10, 20, 30],
      obj = { }
      function fn (x, y, z) { }
      fn.apply (obj, arr);
      fn.call (obj, ...arr);  //基于 ES6 的展开运算符也可以实现把数组中的每一项一次传递给函数
    

    相关文章

      网友评论

          本文标题:call和apply的区别和作用?那个性能会好些?

          本文链接:https://www.haomeiwen.com/subject/ehmptktx.html