call和apply用来调用函数,并用指定对象(第一个参数)替换函数的 this 值,同时用指定数组替换函数的参数。注:也可以不指定参数,此时只是单纯的调用函数,如:fun.call()

语法:

  fun.call(thisobj,arg1,arg2) ;当后面参数个数确定时用call,参数之间用逗号连接

  fun.apply(thisobj,[arg1,arg2]);当后面参数个数不确定时用apply,参数通过数组形式输入

call和apply的作用:

  改变this的指向,第一个参数为你要传入的对象,传入后函数的this就指向了这个对象,后面的参数为你为函数传递的参数值

简单案例:

var str='js';
function fo(){var str='jq';console.log(this.str);//此时this指向windowconsole.log(this===window);console.log(this===obj);//输出js,true,false
}
fo();
var obj={str:'html'
};
fo.call(obj)//输出html,false,true,这就证明了call将fo的this指向改为了obj;
var ob={str:'css',
}
var get=function(){console.log(str);//js 此时读取的是全局变量的值console.log(this.str);//css 此时this指向了ob,返回的就是ob.str
}
get.call(ob)

复杂案例:

function log(){var args=Array.prototype.slice.call(arguments);//将参数转为数组//slice(start,end(非必须) )方法可从已有的数组中返回选定的元素。//Javascript函数中的参数对象arguments是个对象,而不是数组。但它可以类似数组那样通过数字下表访问其中的元素,而且它也有length属性标识它的元素的个数。通常我们把它转换成数组用Array的slice函数,示例代码如下:function fn() { var arr = Array.prototype.slice.call(arguments,0);}//所以Array.prototype.slice.call(arguments)就是将参数转为数组然后返回数组console.log(args);//Array [ "hello", "world" ]args.unshift('(gykj)');//unshift(a,b,c)向数组的开头添加至少一个元素console.log(args);//Array [ "(gykj)", "hello", "world" ]console.log.apply(console,args);//(gykj) hello world 这里的apply可以将数组元素作为字符参数输出//由于参数个数不确定这里只能使用apply
}
log('hello','world')

本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。

欢迎一起私信交流。

“睡服“面试官系列之各系列目录汇总(建议学习收藏)

“约见”面试官系列之常见面试题之第六十四篇之call和apply区别(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题之第八十四篇之手写promise(建议收藏)

    class Promise{constructor(excutor){this.value = '';this.reason = '';this.status = 'padding'this.onFu ...

  2. “约见”面试官系列之常见面试题之第五十四篇之语义化标签(建议收藏)

    目录 什么是语义元素? 为什么要语义化? HTML5常用的语义元素 很多面试官会问:谈谈你对 HTML5语义化标签的理解.那么本篇博客专门解答一下这个问题. 什么是语义元素? 语义是指对一个词或者句子 ...

  3. “约见”面试官系列之常见面试题之第八十五篇之css响应式(建议收藏)

    响应式布局 一个网站能够兼容多个终端,并且在各个终端都可以很好展示体验. 媒体类型 在何种设备或者软件上将页面打开 1 2 3 4 5 6 7 8 9 all:所有媒体 braille:盲文触觉设备 ...

  4. “约见”面试官系列之常见面试题之第七十九篇之ES5和ES6(建议收藏)

    什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...

  5. “约见”面试官系列之常见面试题之第五十八篇之join和split(建议收藏)

    join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. <script>var a=new Array();a[0]="XHTML" ...

  6. “约见”面试官系列之常见面试题之第七十四篇之v-if和v-for优先级(建议收藏)

    永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users" ...

  7. “约见”面试官系列之常见面试题之第六十九篇之document.ready和onload的区别(建议收藏)

    document.ready和onload的区别为:加载程度bai不同du.执行次数不同.执行速度zhi不同. 一.加载程度不同 1.document.ready:在DOM加载完成dao后就可以可以对 ...

  8. “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...

  9. “约见”面试官系列之常见面试题之第六十五篇之ajax如何解析jsonp(建议收藏)

    json是一种轻量级交互格式,本质上都是字符串,常用于前后端的数据交互,本质上就是字符串. 前端解析后端数据 前端在解析后端发来的数据,使用JSON.parse()方法把字符串转为json对象. 前端 ...

最新文章

  1. 仿小米简约Calculator
  2. android studio项目总结,android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)...
  3. Spring Boot——集成七牛云OSS对象存储SDK解决方案
  4. redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
  5. 近视手术─医学界的一个阴谋? !
  6. 原 Linux搭建SVN 服务器2
  7. JdbcTemplate使用小结
  8. “零代码”时代已来!程序员真的要去送外卖了?
  9. 腾讯获准在中国销售Switch游戏机 任天堂股价应声飙升逾14%
  10. 改进我个人知识管理手段
  11. 非基元类型数据结构_Java数据类型–基元和二进制文字
  12. windows下设置tomcat自动启动的注意事项
  13. visual studio 2012如何彻底删除TFS上的团队项目
  14. 密码机分类---服务器密码机
  15. 终端数据防泄漏案例分析
  16. 苹果系统macos腾讯企点无法打开麦克风权限
  17. python爬虫可视化web展示_python爬虫可视化——小龙虾
  18. 用计算机计算下面各题,四下计算机练习题汇总
  19. 魔力宝贝服务器修改器装备,【法兰城的回忆】魔力宝贝游戏手工架设服务端+客户端修改工具+流程说明...
  20. SAP HANA:下一代开放应用平台

热门文章

  1. 最长回文子串 C++
  2. JAVA学习笔记-Scanner的使用
  3. PCL Show Point Cloud 显示点云
  4. 后台命名查询sql查某几个字段传到前台
  5. HTTP管线化(HTTP pipelining)
  6. linux 运行 chom,Hadoop安装-单节点/伪分布(2.7.3)
  7. macbookpro接口叫什么_【科普】什么是雷电接口?苹果电脑MACBOOK PRO有吗?
  8. dj打碟怎么学_学DJ打碟 - Rane声卡连接
  9. php默认日志位置,Laravel 修改默认日志文件名称和位置的例子
  10. byte数组穿换成pcm格式_形象地介绍DSD的编解码原理及和PCM的区别