js中funtion.apply和直接调用有什么区别?

小白写代码
  • 5
新手上路,请多包涵

同样的传参,同样的返回值,区别在哪里?为啥看别人写的代码总喜欢用apply?

回复
阅读 205
3 个回答

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指向,两个你随意

你知道吗?

宣传栏