js笔记:slice.call,自执行函数中需要传入window作为参数,vue中的event对象

2019.8.19:

js笔记:在vue项目中时候,有个@click事件 ,里面是一个箭头函数,箭头函数参数是一个event,后来查阅资料知道:

当一个事件处理器被触发时,名为Event的类实例会作为第一个参数传入处理器中

 

下图参考自:https://www.cnblogs.com/gitByLegend/p/10836922.html

js笔记:slice.call,自执行函数中需要传入window作为参数,vue中的event对象_第1张图片

2019.8.24:为什么自执行函数中需要传入window作为参数

:下边是我网上找到的一个答案

自执行函数就是一个闭包,外界无法访问里面的方法,只有将window传进去,将方法或对象绑定到window上,自执行函数执行完毕后,window上才会挂载这个函数或方法。

js中的自执行匿名函数 (function(){})()

 

 

 

2019.9.19:slice.call用法:

https://www.jianshu.com/p/f4f0b788e021

  • 也就是说,slice用来截取一部分数组元素并返回新数组。接收两个可选参数,表示目标数组的下标范围:[begin, end)。begin省略则默认为0,end省略默认一直截取到数组末尾。

再回过头看[].slice.call(),如果传入一个类数组

var arrayLike = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
}

[].slice.call(arrayLike)将经历这些步骤:让arrayLike拥有数组的slice方法,slice方法被调用,其作用目标为arrayLike,由于没有传入其他参数,slice()默认返回所有下标的元素并返回新数组,最终得到:

var array = [].slice.call(arrayLike);
array;  // ['a', 'b', 'c']

通过上文分析,我们知道apply和call具有同样的作用,那为什么不用apply呢?两者的区别在于传参的形式,从第二个参数开始(都是可选参数),都会成为调用的函数的参数,call接收一个个参数,而apply接收一个由这些参数组成的数组。如果只是原封不动的转换成数组的话,用apply和call没有任何区别,如果在转换的过程中需要对slice传参,call就更合适了。

 

你可能感兴趣的:(前端)