同样的传参,同样的返回值,区别在哪里?为啥看别人写的代码总喜欢用apply?
###call / apply 这俩都可以改变 this
的指向。目的很简单,就是为了保存上下文信息。
因为 JS 中异步回调函数可能会满天飞,传着传着 this
就变了。
你可能会见到过类似的“防守型”代码:
onClickSomeEl() {
let that = this; // 保存 this
doSomething(function() {
doOtherThing() {
that.balabala();
});
that.balabala();
});
}
写法很丑陋,有多层回调嵌套时就更明显了。有了 call / apply 就可以有效的避免这种丑陋的写法,减轻心智负担。(ES6 的箭头函数也可一定程度上规避这个问题,不过先不展开讲了,说多了你更晕了)
不过不建议你在自己代码里去这么写,很容易绕晕了,一般都是框架层帮你封装的。
###主要是更改function中this的指向,如果function中没有用到this,那么就结果而言没有区别
###都是可以改变this
指向,一个func.apply(obj, ['A', 'B']);
,一个这样func.call(obj, 'C', 'D')
,后面传递参数不一样,你如果传人数组你就用apply
。只是改变this
指向,两个你随意