Inhaltsverzeichnis
问题1:变量 vs 属性
答案:
问题4:补全代码
问题5:问候与告别
问题6:棘手的 length
Antwort:
Frage 4: Vervollständigen Sie den Code
Frage 5: Grüße und Abschied
Frage 6: Die knifflige Länge
问题7:调用参数
总结
Heim Web-Frontend js-Tutorial 7 interessante Interviewfragen zu „diesem' in JavaScript. Können Sie sie alle richtig beantworten?

7 interessante Interviewfragen zu „diesem' in JavaScript. Können Sie sie alle richtig beantworten?

Mar 25, 2021 am 10:18 AM
javascript this 面试题

7 interessante Interviewfragen zu „diesem' in JavaScript. Können Sie sie alle richtig beantworten?

Verwandte Empfehlungen: Zusammenfassung der großen Front-End-Interviewfragen 2021 (Sammlung)

In JavaScript ist this der Funktionsaufrufkontext. Gerade weil das Verhalten von this komplex ist, werden in JavaScript-Interviews immer Fragen zu this gestellt. 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()); // 输出什么??
Nach dem Login kopieren

答案:

输出: '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());     // 输出什么??
Nach dem Login kopieren

答案:

输出:'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);
Nach dem Login kopieren

答案:

延迟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!"
}

// 把你的代码写在这里.....
Nach dem Login kopieren

答案:

至少有 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();
Nach dem Login kopieren

问题5:问候与告别

以下代码会输出什么:

const object = {
  who: 'World',

  greet() {
    return `Hello, ${this.who}!`;
  },

  farewell: () => {
    return `Goodbye, ${this.who}!`;
  }
};

console.log(object.greet());    // 输出什么??
console.log(object.farewell()); // 输出什么??
Nach dem Login kopieren

答案:

输出: '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);
Nach dem Login kopieren

答案:

输出:4

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

Der beste Weg, sich auf ein Vorstellungsgespräch vorzubereiten, ist zu üben. Deshalb hat dieser Artikel 7 interessante Interviews basierend auf dem Schlüsselwort this zusammengestellt: 🎜🎜Hinweis: Das folgende JavaScript-Code-Snippet läuft im nicht-strikten Modus . 🎜🎜🎜Verzeichnis: 🎜🎜
  • 🎜Frage 1: Variablen vs. Eigenschaften 🎜
  • 🎜Frage 2 :Name der Katze🎜
  • 🎜Frage 3: Verzögerte Ausgabe🎜
  • 🎜Frage 4: Vollständiger Code🎜
  • 🎜Frage 5: Grüße und Abschied🎜
  • 🎜Frage 6: Knifflige Länge🎜
  • 🎜Frage 7: Aufrufparameter🎜
🎜🎜Verwandte Tutorial-Empfehlungen: Javascript-Video-Tutorial🎜🎜

Frage 1: Variablen vs. Attribute 🎜Was wird der folgende Code ausgeben:🎜
var length = 4;
function callback() {
  console.log(this.length); // 输出什么??
}

const object = {
  length: 5,
  method() {
    arguments[0]();
  }
};

object.method(callback, 1, 2);
Nach dem Login kopieren
Nach dem Login kopieren

Antwort:

🎜Ausgabe: 'Hello, World!'🎜🎜object .getMessage () ist ein Methodenaufruf, weshalb this in der Methode gleich object ist. 🎜🎜Es gibt auch eine Variablendeklaration const message ='Hello, Earth!' in der Methode, aber diese Variable hat keinen Einfluss auf den Wert von this.message. 🎜

Frage 2: Name der Katze🎜

🎜Was wird der folgende Code ausgeben: 🎜
{
  0: callback,
  1: 1, 
  2: 2, 
  length: 3 
}
Nach dem Login kopieren
Nach dem Login kopieren

Antwort:

🎜Ausgabe: 'Fluffy' und 'Fluffy'🎜🎜Wenn eine Funktion als Konstruktor aufgerufen wird ( new Pet('Fluffy') ), this im Konstruktor ist gleich dem konstruierten Objekt. 🎜🎜Der Ausdruck this.name = name im Pet-Konstruktor erstellt die Eigenschaft name für das konstruierte Objekt. 🎜🎜this.getName = () => this.name Erstellen Sie die Methode getName für das konstruierte Objekt. Und aufgrund der Verwendung von Pfeilfunktionen ist this in der Pfeilfunktion gleich this im äußeren Bereich, der der Konstruktor Pet ist. 🎜🎜Der Aufruf von cat.getName() und getName() gibt den Ausdruck this.name zurück, der zu 'Fluffy' ausgewertet wird. . 🎜

Frage 3: Verzögerte Ausgabe🎜

🎜Was bewirkt die folgende Codeausgabe: 🎜rrreee

Antwort:

🎜1 Sekunde Verzögerung Anschließend Ausgabe: undefiniert🎜🎜Obwohl die Funktion setTimeout() object.logMessage als Rückruf verwendet, verwendet sie weiterhin object .logMessage wird als reguläre Funktion und nicht als Methode aufgerufen. 🎜🎜Während eines regulären Funktionsaufrufs entspricht <em>this</em> dem globalen Objekt, das in der Browserumgebung <code>window ist. 🎜🎜Aus diesem Grund gibt console.log(this.message) in der Methode logMessage window.message aus, also undefiniert code>. 🎜<h2 id="strong-Frage-Vervollständigen-Sie-den-Code-strong"><strong>Frage 4: Vervollständigen Sie den Code</strong></h2>🎜So rufen Sie die logMessage-Funktion auf, damit sie <code>"Hello, World!" ausgibt. 🎜rrreee

Antwort:

🎜Es gibt mindestens drei Möglichkeiten, dies zu tun: 🎜rrreee

Frage 5: Grüße und Abschied

🎜Was wird der folgende Code ausgeben:🎜rrreee

Antwort:

🎜Ausgabe: 'Hello, World!' und 'Goodbye, undefiniert !'🎜🎜Beim Aufruf von object.greet() innerhalb der Methode greet() ist der Wert this gleich widersprechen, weil greet eine reguläre Funktion ist. Daher gibt object.greet() 'Hello, World!' zurück. 🎜🎜Aber farewell() ist eine Pfeilfunktion, und der this-Wert in der Pfeilfunktion ist immer gleich dem this-Wert im äußeren Umfang. 🎜🎜Der äußere Bereich von farewell() ist der globale Bereich, wobei this das globale Objekt ist. object.farewell() gibt also tatsächlich 'Goodbye, ${window.who}!' zurück, was zu 'Goodbye, undefiniert!' führt . 🎜<h2 id="strong-Frage-Die-knifflige-Länge-strong"><strong>Frage 6: Die knifflige Länge</strong></h2>🎜Was wird der folgende Code ausgeben: 🎜rrreee<h4 id="strong-Antwort-strong"><strong>Antwort: </strong></h4>🎜Ausgabe: 4🎜🎜callback() wird mit einem regulären Funktionsaufruf innerhalb von method() aufgerufen. Da der Wert von this während eines regulären Funktionsaufrufs gleich dem globalen Objekt ist, führt this.length in der Funktion callback() zu 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);
Nach dem Login kopieren
Nach dem Login kopieren

答案:

输出:3

obj.method(callback, 1, 2) 被调用时有3个参数:callback12。结果, method() 内部的arguments 特殊变量是有如下结构的数组类对象:

{
  0: callback,
  1: 1, 
  2: 2, 
  length: 3 
}
Nach dem Login kopieren
Nach dem Login kopieren

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

总结

如果你答对了 5 个以上,那么你对 this 关键字掌握的情况是很不错的。否则,你就需要好好复习一下 this 关键字。

本文翻译于:https://dmitripavlutin.com/javascript-this-interview-questions/

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt von7 interessante Interviewfragen zu „diesem' in JavaScript. Können Sie sie alle richtig beantworten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems Dec 17, 2023 am 08:41 AM

JavaScript ist eine in der Webentwicklung weit verbreitete Programmiersprache, während WebSocket ein Netzwerkprotokoll für die Echtzeitkommunikation ist. Durch die Kombination der leistungsstarken Funktionen beider können wir ein effizientes Echtzeit-Bildverarbeitungssystem erstellen. In diesem Artikel wird erläutert, wie dieses System mithilfe von JavaScript und WebSocket implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Anforderungen und Ziele des Echtzeit-Bildverarbeitungssystems klären. Angenommen, wir haben ein Kameragerät, das Bilddaten in Echtzeit sammeln kann

See all articles