call vs apply vs bind in JavaScript
All three let you set `this` explicitly — the difference is arguments and timing.
The difference
call(ctx, a, b) invokes now with args listed. apply(ctx, [a, b]) invokes now with an args array. bind(ctx, a) returns a NEW function with this permanently fixed (and optional pre-filled args) — it doesn't invoke.
intro.call(p, "FE");
intro.apply(p, ["Lead"]);
const bound = intro.bind(p); bound("Mentor");When to use each
Use call/apply to invoke immediately with a chosen this; with spread, apply is rarely needed (fn(...args)). Use bind to create a function with this fixed for later — e.g. event handlers or partial application.
Master this and binding
call/apply/bind, the four this rules and the closures behind them — in the JavaScript Interview Kit.
⚡ Get the JavaScript Interview Kit → ₹299Frequently asked questions
- Which is used most today?
- bind, for fixing this on callbacks. call/apply are less common now that spread handles argument arrays.
- Do these work on arrow functions?
- No — arrow functions ignore call/apply/bind for this; they capture it lexically.
