Syntax
this.propertyExamples
this in Object Methods
this refers to the object the method is called on.
const person = {
name: "Alice",
greet() {
console.log(`Hi, I am ${this.name}`);
}
};
person.greet(); // "Hi, I am Alice" - this === personThe Common this Pitfall
Losing the correct this when a method is detached from its object.
const person = {
name: "Alice",
greet() {
console.log(this.name);
}
};
const greetFn = person.greet;
// greetFn(); // undefined - this is no longer bound to person
// Arrow functions solve this in callbacks, since they inherit this
const timer = {
seconds: 0,
start() {
setInterval(() => {
this.seconds++; // "this" correctly refers to timer
}, 1000);
}
};Explicitly Setting this
Using call, apply, and bind to control what this refers to.
function introduce() {
console.log(`I am ${this.name}`);
}
const user = { name: "Charlie" };
introduce.call(user); // "I am Charlie" - calls immediately with this = user
introduce.apply(user); // same as call, but takes args as an array
const boundIntroduce = introduce.bind(user);
boundIntroduce(); // "I am Charlie" - permanently bound, callable laterBest practices
- Use regular functions for object methods where you need this to refer to the calling object
- Use arrow functions for callbacks inside methods where you want this to stay bound to the outer context
- Use .bind() when passing a method as a callback and you need to preserve its original this
- Avoid relying on this in top-level standalone functions - it is undefined in strict mode and easy to misuse
At a glance
- Purpose
- Application logic and interaction
- File extension
- .js ยท .mjs
- Runs in
- Browsers and JavaScript runtimes
- Usually used with
- HTML, CSS and Web APIs
Specifications & further reading
Related JavaScript documentation
Arrow Functions
Arrow functions provide a more concise syntax for writing function expressions in JavaScript. Introduced in ES6, they use the => syntax and have some important differences from regular functions, particularly in how they handle the "this" keyword. Arrow functions are especially useful for callbacks, array methods, and short inline functions.Variables: var, let, const
JavaScript has three ways to declare variables. var is the original way, function-scoped and hoisted with a default value of undefined. let, introduced in ES6, is block-scoped and can be reassigned. const is also block-scoped but cannot be reassigned after its initial value is set. Modern JavaScript strongly favors let and const over var.Data Types
JavaScript has seven primitive data types - string, number, boolean, undefined, null, bigint, and symbol - plus the object type, which includes arrays, functions, and plain objects. JavaScript is dynamically typed, meaning a variable can hold any type and that type can change. The typeof operator reports a value's type at runtime.Arithmetic Operators
Arithmetic operators perform mathematical calculations on numbers: addition (+), subtraction (-), multiplication (*), division (/), remainder/modulo (%), and exponentiation (**). The + operator also performs string concatenation when either operand is a string. Increment (++) and decrement (--) adjust a variable by one.
Arrow functions provide a more concise syntax for writing function expressions in JavaScript. Introduced in ES6, they use the => syntax and have some important differences from regular functions, particularly in how they handle the "this" keyword. Arrow functions are especially useful for callbacks, array methods, and short inline functions.Variables: var, let, const
JavaScript has three ways to declare variables. var is the original way, function-scoped and hoisted with a default value of undefined. let, introduced in ES6, is block-scoped and can be reassigned. const is also block-scoped but cannot be reassigned after its initial value is set. Modern JavaScript strongly favors let and const over var.Data Types
JavaScript has seven primitive data types - string, number, boolean, undefined, null, bigint, and symbol - plus the object type, which includes arrays, functions, and plain objects. JavaScript is dynamically typed, meaning a variable can hold any type and that type can change. The typeof operator reports a value's type at runtime.Arithmetic Operators
Arithmetic operators perform mathematical calculations on numbers: addition (+), subtraction (-), multiplication (*), division (/), remainder/modulo (%), and exponentiation (**). The + operator also performs string concatenation when either operand is a string. Increment (++) and decrement (--) adjust a variable by one.