有这样一道 JS面试题,问 fn.call.call.call.call(fn2) 的结果是什么?

先说下 call 函数的内部原理:

  1. 可以改变函数的this;
  2. 执行函数

下面模拟下 原生的call函数:

Function.prototype.call = function(context, ...args){context = context? Object(context) : window;// 改变 this context.fn = this;// 执行函数return  context.fn(...args);
}

如下:

function fn(){console.log(11)
}function fn2(){console.log(11)
}
问:
fn.call.call.call.call(fn2) 的结果是什么?

解析:

  1. 前面的一串 fn.call.call.call.call 并没有调用,只是获取对象的call属性,所以,这一串的结果是 Function.call 属性。
  2. 所以那一串 就是 Function.call.call(fn2);还可以解理为 fn3.call(fn2)。
  3. 根据call的原理(可参考上面的call模拟),在 fn3执行call,其实际是这样执行的 fn2.fn3()
  4. 由于 fn3实际上就是 call 函数,所以, fn2.fn3() 等价于 fn2.call()
  5. 所以,上面那一串代码的最终结果,就是调用 fn2,所以结果输出 22.

转自https://blog.csdn.net/xufang461010923/article/details/108111226

js面试题:fn.call.call.call.call(fn2) 解析相关推荐

  1. 2017面试分享(js面试题记录)

    2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2'a8' * 3 2. 一道this的问题 var num = 10;var obj = {num:8,inner: {num ...

  2. (五)不只是 huohuo 的 JS 面试题

    写过最多的是 JS 相关的文章,做过最完整的是 JS 的思维导图,敲过最多的依然是 JS 代码,我觉得自己的 JS 还算可以了.写到这里的时候,我已经离职一周,也参加了几次面试,大多数问题都能按自己的 ...

  3. javascript算法+手写js面试题

    链表 function ListNode(val, next) {this.val = (val===undefined ? 0 : val)this.next = (next===undefined ...

  4. js面试题继承的方法及优缺点解答

    这篇文章主要为大家介绍了js面试题继承的方法及优缺点解答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 目录 说一说js继承的方法和优缺点? 一.原型链继承 二.借用构造 ...

  5. 前端人必看的JS面试题汇总

    面试是每一个前端人在求职过程中都需要面对的事情.在面试过程中,面试官没有办法通过实践操作去了解应聘者的技能水平,所以他们更多地会通过"八股文"的考察来判断你是否符合公司的招聘要求. ...

  6. JS面试题汇总(四)

    往期点这里:↓ JS面试题汇总(一) JS面试题汇总(二) JS面试题汇总(三) 31. JS 单线程还是多线程,如何显示异步操作 参考答案: JS 本身是单线程的,他是依靠浏览器完成的异步操作. 解 ...

  7. js面试题(持续更新)

    js面试题 new操作符具体干了什么 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型 属性和方法被加入到 this 引用的对象中 新创建的对象由 this 所引用,并且最后隐 ...

  8. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

  9. js经典试题之数据类型

    js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...

  10. 记录一些js面试题以及解法

    记录一些js面试题,解法,感悟. 1.将字符串"aaaabbbbcccc"转换"4a4b4c" 解法1 var str = "aaaabbbbcccc ...

最新文章

  1. 如何修改Exchange邮件报警信息
  2. Access denied (java.lang.RuntimePermission getClas
  3. 重温强化学习之强化学习简介
  4. 基于依存句法分析的关键短语抽取算法实战
  5. Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源码
  6. 6、mysql中字段
  7. 08Mysql与python交互
  8. python oop求三角形面积公式_Python OOP --action()函数
  9. 怎么创建数据表的实体类和业务类_SSM搭建二手市场交易平台(二):数据表设计...
  10. hadoop yarn 获取日志_Hadoop YARN日志查看方式
  11. 图片夹_【第8期】EHS大咖答疑解惑吊运事故的罪魁祸首之一:钢丝绳夹!不看不知道!...
  12. 数据挖掘之apriori算法(python实现详细注释)
  13. 【Web文件上传下载】各种类型文件对应的content-type
  14. opencms9.0安装
  15. 机载激光雷达原理与应用科普(四)
  16. H7000 DTU 问与答
  17. PS选择工具/魔棒工具详
  18. html中button标签reset用法
  19. 木讷的程序员需要知道的事情 (七)
  20. php实例精通txt下载,PHP实例精通(1碟)

热门文章

  1. linux 硬件raid 坏道,Linux服务器磁盘坏道的修复过程
  2. 德国的“隐形冠军”是怎么造成的?
  3. kpi绩效考核流程图_KPI绩效考核如何运作起来(内含企业KPI实例之详解)
  4. 程序员如何写项目经历
  5. 计算机通信与网络实验西电,西安电子科技大学计算机通信与网络CH04 数字传输.pdf...
  6. 市场调查大赛全保姆教程(经验分享)
  7. 数据类型--Number类型
  8. 定点补码加减法运算_定点整数的加减法
  9. 四六级、考研英语单词记忆---知米背单词APP推荐!
  10. 调侃《HeadFirst设计模式》之装饰者模式