JavaScript this Operator Interview Questions (original) (raw)

In JavaScript, **this is a special keyword that refers to the current object or context. It behaves differently depending on where it's used. If you use this in a regular function, it refers to the global object (in browsers, this is the window). In an object's method, this refers to the object itself.

We are going to discuss some Interview Questions related to This keyword.

1. Why this is Necessary in JavaScript?

2. What is the default value of this in the global context?

JavaScript `

console.log(this); // Window (browser) or global object (Node.js)

`

3. How does this behave inside a simple function?

JavaScript `

function show() { console.log(this); // Global object or undefined in strict mode } show();

`

Output

<ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Functio...

4. What is the value of this in strict mode?

JavaScript `

"use strict"; function test() { console.log(this); } test();

`

5. How does 'this' work in an object method?

JavaScript `

const obj = { name: "GeeksforGeeks", greet() { console.log(this.name); } }; obj.greet();

`

6. How does 'this' work with nested functions?

JavaScript `

const obj = { name: "GeeksforGeeks", greet() { function inner() { console.log(this); } inner(); } }; obj.greet();

`

Output

<ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Functio...

7. How does this behave in an arrow function?

JavaScript ``

const obj = { name: "Geeks", greet: () => { console.log(this.name); // undefined, as this refers to the enclosing scope } }; obj.greet();

``

8. What is the value of this inside a class?

JavaScript `

class Person { constructor(name) { this.name = name; } greet() { console.log(this.name); // Refers to the instance of the class } } const p = new Person("GeeksforGeeks"); p.greet(); // "GeeksforGeeks"

`

9. What happens to 'this' in an IIFE?

JavaScript `

(function () { console.log(this); // Global object or undefined in strict mode })();

`

Output

<ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Functio...

The output of the code depends on whether you are running it in strict mode or non-strict mode.

**Non-strict mode (default in regular JavaScript): In non-strict mode, when a function is called without an object context (like in your case), this refers to the global object (in the browser, it’s window).

JavaScript `

// In a browser: Window { ... } // Represents the global window object in a browser

`

**Strict mode: In strict mode ('use strict';), this inside a function call refers to undefined instead of the global object.

10. How does 'this' behave in setTimeout?

JavaScript `

const obj = { name: "GeeksforGeeks", greet() { setTimeout(function () { console.log(this.name); // undefined in strict mode }, 1000); } }; obj.greet();

`

11. How to fix 'this' in setTimeout using arrow functions?

JavaScript `

const obj = { name: "GeeksforGeeks", greet() { setTimeout(() => { console.log(this.name); // "GeeksforGeeks" }, 1000); } }; obj.greet();

`

**In this code:

12. What is 'this' when a function is bound?

JavaScript `

const obj = { name: "GeeksforGeeks" }; function greet() { console.log(this.name); } const boundGreet = greet.bind(obj); boundGreet();

`

**In this code:

13. How does 'this' behave in call and apply?

JavaScript `

const obj = { name: "GeeksforGeeks" }; function greet() { console.log(this.name); } greet.call(obj); greet.apply(obj);

`

Output

GeeksforGeeks GeeksforGeeks

**In this code:

Output

GeeksforGeeks GeeksforGeeks

14. What happens when "this" is used in a constructor function?

JavaScript `

function Person(name) { this.name = name; } const p = new Person("GeeksforGeeks"); console.log(p.name);

`

**In this code

15. How does "this" behave in chaining methods?

JavaScript `

const obj = { count: 0, increment() { this.count++; return this; }, show() { console.log(this.count); return this; } }; obj.increment().increment().show();

`

**In this code

16. What is "this" in an ES module?

In an ES module, this is undefined at the top level because ES modules run in strict mode by default

JavaScript `

console.log(this); // Undefined in Es modules

`

17. What is " **this " inside the an object returned by the function?

JavaScript `

function createObject() { return { name: "GeeksforGeeks", greet() { console.log(this.name); } }; } const obj = createObject(); obj.greet();

`

In this example, the createObject function returns an object with a name property and a greet method. When obj.greet() is called, this refers to the obj itself, so it accesses obj.name and prints "GeeksforGeeks".

18 . How does "this" behave in a factory function when used inside a method of the returned object?

JavaScript `

function create(name) { return { name, greet() { console.log(this.name); } }; } const person = create("GeeksforGeeks"); person.greet();

`

**In this code

19 . How does "this" behave in a forEach callback?

JavaScript `

[1, 2, 3].forEach(function () { console.log(this); }, { name: "GeeksforGeeks" });

`

Output

{ name: 'GeeksforGeeks' } { name: 'GeeksforGeeks' } { name: 'GeeksforGeeks' }

**In this code

20. How can you pass "this" explicitly in a Promise chain?

JavaScript `

const obj = { name: "GeeksforGeeks", greet() { return Promise.resolve(this.name).then(name => { console.log(name); }); } }; obj.greet();

`

20. How does "this" behave with getters and setters?

JavaScript ``

const obj = { name: "Geeks", get greet() { return Hello, ${this.name}; }, set greet(newName) { this.name = newName; } }; console.log(obj.greet); // Output: Hello, Geeks obj.greet = "forGeeks"; console.log(obj.greet); // Output: Hello, forGeeks

``

Output

Hello, Geeks Hello, forGeeks

In this example, obj has a getter and setter for the greet property. The getter returns a greeting message with this.name, and the setter updates this.name. Initially, obj.greet prints "Hello, Geeks". After setting obj.greet = "forGeeks", it updates name and prints "Hello, forGeeks".

21. How does " this " behave with async iteration?

JavaScript ``

const obj = { name: "GeeksforGeeks", async *greet() { yield Hello, ${this.name}; } }; (async () => { for await (const message of obj.greet()) { console.log(message); } })();

``

Output

Hello, GeeksforGeeks

**In this code

22. How does "this" behave with Map key iteration in JavaScript?

JavaScript `

const map = new Map(); map.set("key1", { name: "Geeks" }); map.set("key2", { name: "forGeeks" }); map.forEach(function (value, key) { console.log(this.name); }, { name: "GeeksforGeeks" });

`

Output

GeeksforGeeks GeeksforGeeks

Output

GeeksforGeeks GeeksforGeeks

23 .How does "this" behave with async/await in JavaScript?

JavaScript `

const obj = { name: "GeeksforGeeks", async greet() { console.log(this.name); } }; obj.greet();

`

In this example, obj.greet() is an asynchronous function that logs this.name. Since this refers to the obj object, it prints "GeeksforGeeks", which is the value of obj.name.

24. What is the value of " this " in an event handler in a DOM element?

JavaScript `

const obj = { name : "GeeksforGeeks", greet() { document.getElementById("btn").addEventListener( "click", function() { console.log(this.name); // Output: undefined }); } }; obj.greet();

`

25. How does " this " work with new and constructor functions in JavaScript?

JavaScript ``

function Animal(name) { this.name = name; this.speak = function() { console.log(${this.name} makes a sound); }; } const dog = new Animal("Dog"); dog.speak();

``

**In this code