返回顶部
首页 > 资讯 > 精选 >JavaScript中关于“this”的面试题
  • 167
分享到

JavaScript中关于“this”的面试题

2023-06-14 08:06:26 167人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关javascript中关于“this”的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 JavaScript 中,this 是函数调用上下文。正是由于 this 的行为

这篇文章将为大家详细讲解有关javascript中关于“this”的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在 JavaScript 中,this 是函数调用上下文。正是由于 this 的行为很复杂,所以在 JavaScript 面试中,总是会问到有关  this 的问题。

做好的准备面试的方法是练习,所以本文针对 this 关键字整理了 7 个有趣的面试:

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

目录:

  • 问题1:变量 vs 属性

  • 问题2:Cat 的名字

  • 问题3:延迟输出

  • 问题4:补全代码

  • 问题5:问候与告别

  • 问题6:棘手的 length

  • 问题7:调用参数

相关教程推荐:javascript视频教程

问题1:变量 vs 属性

以下代码会输出什么:

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:Cat 的名字

以下代码会输出什么:

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  在构造的对象上创建方法 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

问题4:补全代码

如何调用logMessage函数,让它输出 "Hello,World!"

const object = {  message: 'Hello, World!'};function logMessage() {  console.log(this.message); // => "Hello, World!"}// 把你的代码写在这里.....
答案:

至少有 3 种方式,可以做到:

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

callback()是在method()内部使用常规函数调用来调用的。由于在常规函数调用期间的 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个参数:callback12。结果, method() 内部的arguments 特殊变量是有如下结构的数组类对象:

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

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

关于“JavaScript中关于“this”的面试题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中关于“this”的面试题

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

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

猜你喜欢
  • JavaScript中关于“this”的面试题
    这篇文章将为大家详细讲解有关JavaScript中关于“this”的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 JavaScript 中,this 是函数调用上下文。正是由于 this 的行为...
    99+
    2023-06-14
  • 关于this的面试题有哪些
    这篇文章给大家介绍关于this的面试题有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。问题1:变量 vs 属性下面的打印结果是啥:const object =&...
    99+
    2024-04-02
  • 有哪些关于this的面试题
    这篇文章主要讲解了“有哪些关于this的面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于this的面试题”吧!注意:下面的 JavaScrip...
    99+
    2024-04-02
  • JavaScript中关于闭包的面试题有哪些
    小编给大家分享一下JavaScript中关于闭包的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!每个 JavaScript 程序员都必须知道闭包是什么...
    99+
    2023-06-14
  • 关于JavaScript执行机制的面试题
    小编给大家分享一下关于JavaScript执行机制的面试题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScript可以直接...
    99+
    2023-06-14
  • Java面试中有哪些关于String类的面试题
    这篇文章将为大家详细讲解有关Java面试中有哪些关于String类的面试题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。比较两个字符串时使用“==”还是equals()方法?当然是equal...
    99+
    2023-05-31
    java 中有 string
  • Java中关于锁的面试题有哪些
    这篇文章主要介绍Java中关于锁的面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3...
    99+
    2023-06-14
  • 关于Tomcat的面试题有哪些
    本篇内容主要讲解“关于Tomcat的面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“关于Tomcat的面试题有哪些”吧!一、什么是TomcatTomc...
    99+
    2024-04-02
  • Angular中关于单元测试的面试题有哪些
    这篇文章主要介绍了Angular中关于单元测试的面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular中的测试有哪些种,基于哪些测试框架Angular的测试...
    99+
    2023-06-15
  • 面试官会问哪些关于Go、JavaScript和Unix的问题?
    作为一名准备找工作的程序员,你一定会面临着各种各样的技术面试。而在技术面试中,面试官们通常会问一些关于Go、JavaScript和Unix的问题。本文将会介绍一些常见的关于Go、JavaScript和Unix的面试问题,并提供相应的演示代码...
    99+
    2023-10-11
    javascript unix 面试
  • php中关于算法面试题的有哪些
    这篇文章主要介绍了php中关于算法面试题的有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境...
    99+
    2023-06-14
  • 关于闭包的面试题有哪些
    本篇内容介绍了“关于闭包的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每个 JavaScri...
    99+
    2024-04-02
  • 关于Java IO的面试题有哪些
    本篇内容介绍了“关于Java IO的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1.IO里面的常见类,字节流、字符流、接口...
    99+
    2023-06-02
  • php中关于中级程序员的一些面试题
    这篇文章将为大家详细讲解有关php中关于中级程序员的一些面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampS...
    99+
    2023-06-14
  • Java中关于数据库的面试题有哪些
    这篇文章主要介绍了Java中关于数据库的面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?首先解释一下...
    99+
    2023-06-20
  • 面试中如何回答关于ASP中load关键字的问题?
    在ASP.NET中,load关键字是一个非常重要的概念。在面试中被问到如何回答关于ASP中load关键字的问题,其实可以从多个角度来回答。在本篇文章中,我们将会从以下几个方面来讨论这个问题: 什么是ASP.NET中的Load事件 Load...
    99+
    2023-09-05
    load 关键字 面试
  • 面试中常见的关于Git的问题有哪些?
    在软件开发行业中,Git已经成为了最常用的版本控制工具之一。因此,在面试过程中,面试官经常会问一些关于Git的问题,以确保应聘者对这个工具有足够的了解。下面我们来看看面试中常见的关于Git的问题有哪些。 Git的基本原理是什么? Git...
    99+
    2023-08-18
    数据类型 面试 git
  • Android中关于Binder常见面试题有哪些
    本篇内容主要讲解“Android中关于Binder常见面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中关于Binder常见面试题有哪些”吧!1.简单介绍下binderb...
    99+
    2023-07-02
  • Android中关于Binder常见面试问题小结
    目录1.简单介绍下binder2.Binder的定向制导,如何找到目标Binder,唤起进程或者线程3.Binder中的红黑树,为什么会有两棵binder_ref红黑树4.Binde...
    99+
    2024-04-02
  • 总结几道关于Node.js的面试问题
    什么是error-first的回调方式 Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。 fs.re...
    99+
    2022-06-04
    几道 Node js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作