iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >有哪些关于this的面试题
  • 886
分享到

有哪些关于this的面试题

2024-04-02 19:04:59 886人浏览 安东尼
摘要

这篇文章主要讲解了“有哪些关于this的面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于this的面试题”吧!注意:下面的 javascrip

这篇文章主要讲解了“有哪些关于this的面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于this的面试题”吧!

注意:下面的 javascript 代码以非严格模式运行。

有哪些关于this的面试题

1. 变量与属性

以下代码输出什么:

const object = {   message: 'Hello, World!',    getMessage() {     const message = 'Hello, Earth!';     return this.message;   } };  console.log(object.getMessage()); // => ?

答案:

输出:'Hello, World!'

'object.getMessage() 是方法调用,这就是为什么方法中的 this 等于  object的原因。

方法中还有一个变量声明 const message ='Hello,Earth!',该变量不会影响 this.message 的值。

2. 猫的名字

以下代码输出什么:

function Pet(name) {   this.name = name;    this.getName = () => this.name; }  const cat = new Pet('Fluffy');  console.log(cat.getName()); // => ?  const { getName } = cat; console.log(getName());     // =>?

答案:输出:'Fluffy' 和 'Fluffy'

当一个函数被当作构造函数调用时( new Pet('Fluffy') ),构造函数内部的 this  等于构造的对象。

Pet 构造函数中的 this.name = name 表达式在构造的对象上创建 name 属性。

this.getName = () => this.name this.getName =()=> this.name 在构造的对象上创建方法  getName。因为使用了箭头函数,所以箭头函数中的 this 等于外部作用域中的 this ,也就是构造函数 Pet。

调用 cat.getName() 和 getName() 会返回表达式 this.name,其结果为 'Fluffy'。

3. 延迟输出

以下代码输出什么:

const object = {   message: 'Hello, World!',    logMessage() {     console.log(this.message); // => ?   } };  setTimeout(object.logMessage, 1000);

答案:

延迟1秒钟后,输出:undefined

尽管 setTimeout() 函数使用 object.logMessage 作为回调,但仍把  object.logMessage 作为常规函数而非方法调用。并且在常规函数调用中 this 等于全局对象,在浏览器环境中是 window。这就是  logMessage 方法内的 console.log(this.message) 输出 window.message 的原因,后者是  undefined。

挑战:怎样修改这段代码使其输出 'Hello, World!'?在下面的评论中写出你的解决方案*

4:补全代码

补全代码,使结果输出 "Hello,World!" 。

const object = {   message: 'Hello, World!' };  function logMessage() {   console.log(this.message); // => "Hello, World!" }  // Write your code here...

答案:

至少有 3 种方式可以把 logMessage() 作为对象上的方法调用。任何一个都被看作是正确答案:

const object = {   message: 'Hello, World!' };  function logMessage() {   console.log(this.message); // => 'Hello, World!' }  // 使用 func.call() 方法 logMessage.call(object);  // 使用 func.apply() 方法 logMessage.apply(object);  // 使用函数绑定 const boundLogMessage = logMessage.bind(object); boundLogMessage();

5:问候与告别

以下代码输出什么:

const object = {   who: 'World',    greet() {     return `Hello, ${this.who}!`;   },    farewell: () => {     return `Goodbye, ${this.who}!`;   } };  console.log(object.greet());    // => ? console.log(object.farewell()); // => ?

答案:

输出:'Hello, World!' 和 'Goodbye, undefined!'

当调用 object.greet() 时,在方法 greet()  内部 this 的值等于 object,因为 greet 是常规函数。所以 object.greet() 返回 'Hello,World!'。

但是 farewell() 是一个箭头函数,所以箭头函数中 this 的值总是等于外部作用域的 this。farewell()  的外部作用域是全局作用域,其中 this 是全局对象。所以 object.farewell() 实际上会返回 'Goodbye, ${window.who}!'  ,其结果为 'Goodbye, undefined!'。

6. 棘手的 length

以下代码输出什么:

var length = 4; function callback() {   console.log(this.length); // => ? }  const object = {   length: 5,   method(callback) {     callback();   } };  object.method(callback, 1, 2);

答案:

输出:4

使用 method() 内部的常规函数调用来调用 callback() 。因为在常规函数调用期间的 this 值等于全局对象,所以在  callback() 函数中 this.length 为 window.length。

位于最外层的第一个语句 var length = 4 在全局对象上创建了属性 length,所以 window.length 变为 4。

最后,在 callback() 函数内部,``this.length的值为window.length,最后输出4`。

7. 调用参数

以下代码输出什么:

var length = 4; function callback() {   console.log(this.length); // 输出什么 }  const object = {   length: 5,   method() {     arguments[0]();   } };  object.method(callback, 1, 2);

答案:输出:3

obj.method(callback, 1, 2) 用了 3 个参数进行调用:callback、1 和 2。结果 method()  内的arguments 特殊变量是有以下结构的类似数组的对象:

{   0: callback,   1: 1,    2: 2,    length: 3  }

因为 arguments[0]() 是对 arguments 对象上 callback 的方法调用,所以 callback 内部的 this 等于  arguments。结果在 callback() 内部的 this.length 与 arguments.length 是相同的,都是3。

感谢各位的阅读,以上就是“有哪些关于this的面试题”的内容了,经过本文的学习后,相信大家对有哪些关于this的面试题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 有哪些关于this的面试题

本文链接: https://www.lsjlt.com/news/83454.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 有哪些关于this的面试题
    这篇文章主要讲解了“有哪些关于this的面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于this的面试题”吧!注意:下面的 JavaScrip...
    99+
    2024-04-02
  • 关于this的面试题有哪些
    这篇文章给大家介绍关于this的面试题有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。问题1:变量 vs 属性下面的打印结果是啥:const object =&...
    99+
    2024-04-02
  • 关于Tomcat的面试题有哪些
    本篇内容主要讲解“关于Tomcat的面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“关于Tomcat的面试题有哪些”吧!一、什么是TomcatTomc...
    99+
    2024-04-02
  • JavaScript中关于“this”的面试题
    这篇文章将为大家详细讲解有关JavaScript中关于“this”的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 JavaScript 中,this 是函数调用上下文。正是由于 this 的行为...
    99+
    2023-06-14
  • 关于Java IO的面试题有哪些
    本篇内容介绍了“关于Java IO的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1.IO里面的常见类,字节流、字符流、接口...
    99+
    2023-06-02
  • 关于闭包的面试题有哪些
    本篇内容介绍了“关于闭包的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每个 JavaScri...
    99+
    2024-04-02
  • Java面试中有哪些关于String类的面试题
    这篇文章将为大家详细讲解有关Java面试中有哪些关于String类的面试题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。比较两个字符串时使用“==”还是equals()方法?当然是equal...
    99+
    2023-05-31
    java 中有 string
  • 关于redis缓存的面试题有哪些
    这篇文章将为大家详细讲解有关关于redis缓存的面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。redis缓存的面试题1、redis和memcached什么区别...
    99+
    2024-04-02
  • 前端关于HTML的面试题有哪些
    这篇文章主要讲解了“前端关于HTML的面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“前端关于HTML的面试题有哪些”吧!1.什么是HTML?HT...
    99+
    2024-04-02
  • 关于angular的前端面试题有哪些
    这篇文章主要介绍了关于angular的前端面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1,ng-if 跟 ng-show/hide 的区别有哪些?第一点区别是,...
    99+
    2023-06-14
  • 有哪些关于Java集合的面试题
    本篇内容主要讲解“有哪些关于Java集合的面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些关于Java集合的面试题”吧!HashMap和HashTable有何不同?  (1)HashM...
    99+
    2023-06-02
  • Java中关于锁的面试题有哪些
    这篇文章主要介绍Java中关于锁的面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3...
    99+
    2023-06-14
  • 关于Python的面试问答题有哪些
    这篇文章主要介绍“关于Python的面试问答题有哪些”,在日常操作中,相信很多人在关于Python的面试问答题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”关于Python的面试问答题有哪些”的疑惑有所...
    99+
    2023-06-16
  • JavaScript中关于闭包的面试题有哪些
    小编给大家分享一下JavaScript中关于闭包的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!每个 JavaScript 程序员都必须知道闭包是什么...
    99+
    2023-06-14
  • Angular中关于单元测试的面试题有哪些
    这篇文章主要介绍了Angular中关于单元测试的面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular中的测试有哪些种,基于哪些测试框架Angular的测试...
    99+
    2023-06-15
  • php中关于算法面试题的有哪些
    这篇文章主要介绍了php中关于算法面试题的有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境...
    99+
    2023-06-14
  • 关于性能优化的面试题有哪些
    本篇内容介绍了“关于性能优化的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、谈谈你对重构的...
    99+
    2024-04-02
  • 关于路由vue-router的vuejs面试题有哪些
    这篇文章主要介绍了关于路由vue-router的vuejs面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。路由 vue-router 面试题1. mvvm框架是什么...
    99+
    2023-06-14
  • Java中关于数据库的面试题有哪些
    这篇文章主要介绍了Java中关于数据库的面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?首先解释一下...
    99+
    2023-06-20
  • Android中关于Binder常见面试题有哪些
    本篇内容主要讲解“Android中关于Binder常见面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中关于Binder常见面试题有哪些”吧!1.简单介绍下binderb...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作