问答

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

作者:admin 2021-04-19 我要评论

同样的传参,同样的返回值,区别在哪里?为啥看别人写的代码总喜欢用apply? ### call / apply 这俩都可以改变 this 的指向。目的很简单,就是为了保存上下文信...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

同样的传参,同样的返回值,区别在哪里?为啥看别人写的代码总喜欢用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指向,两个你随意

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器