call和applay的区别是什么
- call applay 都是function原型上的方法 都是改变函数的this指向
- fn.call(obj,1,2,3) 参数是不定的 传给函数的参数是一个一个的传递的
- fn.applay(obj,[1,2,3]) 参数只有两个 传给函数的参数是用一个数组包裹起来传递的
除了这两个 bind也可以改变this的指向 只不过bind不会立马执行函数 只是先改变this的指向
call和applay哪个性能更好
性能:call 性能要好一点
别人测试过的:当给函数传的参数为3个时,两个的性能差不多,当大于3个的时候,call的性能更好一点,所以开发可以使用call好一点
/*
let arr = [10,20,30]
let obj = {}
function fn(x,y,z) {}
fn.applay(obj,arr) // x=10 y=20 z=30
fn.call(obj,arr) // x=[10,20,30] y=z=undefined
fn.call(obj,...arr) // x=10 y=20 z=30 基于es6的展开运算符
*/
/*
性能测试(只供参考):
任何性能测试都与测试环境有关,例如:CPU\内存\GPU等电脑,当前性能不会有相同的情况,不同的浏览器也会导致性能上的不同:
*/
// 只到毫秒
let time1 = new Date().getTime()
for(var i= 0;i<10;i++) {
}
let time2 = new Date().getTime()
console.log(time2 - time1)
// 更精确
console.time('A')
for (var i = 0; i < 10; i++) {}
console.timeEnd('A')
// console.profile(),在火狐浏览器中安装FireBug,可以更精准的获取到程序每一个步骤所消耗的时间
console.profile();
for (var i = 0; i < 100000000; i++) {}
console.profileEnd();