前端面试题分享:fn1.call.call(fn2)

function fn1() {console.log(1)
}function fn2() {console.log(2)
}fn1.call(fn2)  // 此处打印结果
fn1.call.call(fn2)  // 此处打印结果

思路:自己实现call方法,根据实现过程中了解打印结果出现的原因。

Function.prototype.mycall = function my(context, ...args) {// context -> window// ??表示只有context的值是undefined或null时才会返回windowcontext = context ?? windowcontext.fn = thisconst result = context.fn(...args)delete context.fnreturn result
}fn1.mycall(fn2)  // 打印结果1
fn1.mycall.mycall(fn2)  // 打印结果2

fn1.mycall.mycall(fn2)调用中,首先调用mycall(fn2),调用过程中,首先参数context接收到的是fn2this指向的值为f my(context, ...args),然后在第二次执行context.fn(...args)时,实际执行的是fn2.my(context, ...args),代码再次调用function my(context, ...args),再次调用时context接受的是空数组,所以判断结果为context=window,所以内部指向为context.fn = this,实际为window.fn = fn2(),因此代码最后执行的实际调用为:window.fn2(),其结果自然是2

如果对过程不是很明白的话,可以再浏览器中进行调试,一步步F11进行调试,过程就很清晰了,如果本文章有帮助到你,可以再评论区写下你的观点~

fn1-call-call-fn2-面试题相关推荐

  1. 【前端】2015阿里前端实习生在线笔试题

    网上找的题,自己做了做. ... 2015阿里巴巴前端实习生在线笔试题 1. (单项选择)对于下列程序运行结果,符合预期的是 function f1() { console.time('time sp ...

  2. 2015某大型电商集团的前端实习生在线笔试题(无耻的拿来偷看了)

    2015某大型电商集团的前端实习生在线笔试题(嘿嘿猜猜是谁的) 1.(单项选择)对于下列程序运行结果,符合预期的是 function f1() { console.time('time span'); ...

  3. C/C++笔试题(基础题)

    为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...

  4. python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题

    我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...

  5. 2018最新Web前端经典面试试题及答案

    本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案.马上就要过春节了,开年就是崭新的一年,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识 ...

  6. 最新前端vue,js,css,性能优化面试题66道题

    这些是我总结的前端常会遇到的面试题,大家可以多多参考 希望大家可以留下意见,我也可以吸收不足 1.js其中基本数据类型有哪些 五种: undefined.null.Boolean.Number和Str ...

  7. 最近超火的公司前端面试题

    前端面试题: 一个200*200的div在不同分辨率屏幕上下左右居中,用css实现 div{ position: absolute; width: 200px; height: 200px; left ...

  8. 2018最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)--转载

    版权声明:本文为转载文章,感谢博主小胖梅的博客,如有侵权,请联系我删除,谢谢 转载链接: https://blog.csdn.net/xm1037782843/article/details/8070 ...

  9. 这几道Python面试题,稳准狠,Python面试题No15

    文章目录 必须放一个表情包,太魔性了! 第1题: 修改以下Python代码,使得下面的代码调用类A的show方法? 第2题:修改以下Python代码,使得代码能够运行 第3题: 下面这段代码的输出是什 ...

  10. JavaScript中关于call函数的一道面试题

    来看一道面试题: ``` function fn1() {console.log(1);} function fn2() {console.log(2);} fn1.call(fn2);  //分析: ...

最新文章

  1. NewPhy.-揭秘优势种dominant species
  2. 小米今日正式进军越南市场 借助合作方铺渠道分销
  3. mysql深入使用教程_深入mysql基础知识的详解
  4. python现在第几版-2020 年10月编程语言排行榜,Python 排名逼近第二
  5. 【Git入门之五】版本管理
  6. AndroidStudio_安卓原生开发_在Androidstudio中查看设备管理器---Android原生开发工作笔记160
  7. iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
  8. javascrip 的数据类型
  9. ios-绘制-小知识点(裁减)
  10. linux马达驱动程序,一种Linux系统的微型针式打印机及其驱动方法与流程
  11. 获取最近一年十二月份的月份
  12. 万豪国际集团全新人才品牌“Be”将于全球超8300家酒店上线 | 美通社头条
  13. 做跨境电商需要哪些准备?
  14. 消除WordPress上的渲染阻止JavaScript和CSS
  15. STM32学习记录0002-STM32初探
  16. 年薪40-80K *14 | 网境科技SLAM算法工程师、算法科学家招聘
  17. MDT CustomSettings.ini Tips Tricks
  18. 基于Matlab的故障检测的核PCA轮廓图
  19. 长尾词挖掘免费工具-长尾关键词挖掘词
  20. mysql生成千万级测试数据

热门文章

  1. Mac苹果电脑开启任何来源选项详细教程
  2. 自锁时间电路plc_自锁与互锁电路的plc梯形图程序【图】
  3. ES6新特性-前端面试问题
  4. 马化腾回忆创业:曾假扮女孩子陪聊
  5. arcgis api for javascript 3.33 清空、删除图层
  6. 计算机网络的核心概念
  7. elasticsearch集群搭建报错[not enough master nodes discovered during pinging]
  8. 优化 | 线性化:两个0-1变量相乘的线性化
  9. 如何更改Excel2016中折线图的连接点颜色和样式?
  10. Beats:如何在 Elastic Stack 中得到并使用 Root CA Certificate fingerprint