说到apply,大家都是知道是改变this指向的,也都会立马和call联系在一起,MDN官网上也是如是说:

其实我们在平常使用call和apply的时候,都是想到他们的改变函数的this的功能,

正如MDN上面说的apply和call只有唯一一点区别,就是:apply方法的二个参数接受的是“参数数组”!

也就是说:apply的第二个“参数数组”最终会打散被调用apply的函数所调用;

因此我们也可以利用这一特性,进行数组的打散的操作,如MDN中所述:

当然我们这里也可以使用ES6的扩张语句,如下:

之所以要写这篇文章就是告诫自己:思维不要太局限,就像觉得apply就只能用于改变this的指向的功能。当我们咋一看Math.max.apply(null, arr)这种会蒙圈,其实这里就是省去了自己展开了数组的操作。

在发现疑惑的时候,可以放空自己的过去的知识,重新阅读API。重新去思考这个问题。

就像自己以前做物理题目,脑子里永远别记忆题型,脑子里只需要记住公式和原理,所有的题目都是去思考分析再解答,以不变应万变!!而不是把题目归类,再回忆改类题型的解题方法。

apply的“非改变this“的用法的更多相关文章

  1. javascript中apply和eval结合的强大用法

        eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码  如下例子 <a class="cl ...

  2. 深入理解this和call、bind、apply对this的影响及用法

    首先看一道网易的面试题: var a = { a:"haha", getA:function(){ console.log(this.a); } } var b = { a:&qu ...

  3. JavaScript 中call()、 apply()、 bind()改变this指向理解

    最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包 ...

  4. js'中的apply和call和bind的用法

    apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:这 ...

  5. JS中apply和call的区别和用法

    Javascript中有一个call和apply方法,其作用基本相同,但是它们也有略微不同的地方. JS手册中对call方法的解释是: call方法:调用一个对象的一个方法,以另一个对象替换当前对象. ...

  6. apply/call/bind的区别与用法

    apply 方法/call 方法 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是 ...

  7. apply 、 call 、 bind的用法

    1.apply 方法 apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. apply方法最多只能有两个参数——新 ...

  8. 细说 call、apply 以及 bind 的区别和用法

    call 和 apply 的共同点 它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的. 为何要改变执行上下文?举一个生活中的小例子:平时没时间做饭的 ...

  9. apply,call,bind函数作用与用法

    作用 可以把方法借给其它对象使用,并且改变this的指向 a.apply(b,[3,2]);//this指向由a变为b, a的方法借给b使用 实例: function add(a,b){       ...

随机推荐

  1. klee的docker镜像中没有gcc环境

    sudo apt-get update 密码 klee sudo apt-get install gcc export LD_LIBRARY_PATH=/home/klee/lib/:$LD_LIBR ...

  2. spring源码开发环境搭建

    下载spring源码 地址 https://github.com/spring-projects/spring-framework 可以下载release版本,也可以直接git clone当前开发版本 ...

  3. python实现百度地图API获取某地址的经纬度

    申请百度API 1.打开网页 http://lbsyun.baidu.com/index.php?title=首页 选择功能与服务中的地图,点击左边的获取密匙,然后按照要求申请即可,需要手机和百度账号 ...

  4. (转)教你手工mysql拆库

    原文:http://www.cnblogs.com/cchust/p/3859967.html 互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问 ...

  5. C++的开源跨平台日志库glog学习研究(二)--宏的使用

    上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...

  6. 【树】Unique Binary Search Trees II

    题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. F ...

  7. SharePoint 2013创建应用程序时IIS端口文件夹下没文件

    最近SharePoint 2007迁移到2013的时候,碰到创建应用程序时IIS端口文件夹下没文件的问题,网上找了大把的原因,终于在这里找到了解决方案: Fix: 1. Open IIS on the ...

  8. ES6 笔记(二)- 总结

        在最近进行的项目中,已经全面使用到ES6,这里对ES6进行整理总结.用得比较多的是带*的内容,这些语法.新增类型.模块调用等从代码量上.可读性上.操作上给项目带来了不少便利.   1.语法 1 ...

  9. PL/SOL csv格式导出查询结果时出现某些列的数据被四舍五入了的解决办法

    昨天用pl/sql从oracle数据库捞取数据时,发现导出的csv格式中某些列的数据被进行了四舍五入处理了,当然这些列都是纯数字的,百思不得其解,后来上网才,才得知了原因. 这并不是导出的CSV文件数 ...

  10. HA_Snapshots 数据库快照

    1. 创建测试数据库HA_Snapshot 2. 创建快照 create database HA_Snapshot_20 on ( name = HA_Snapshot, filename = '.. ...