call and apply invoke the function immediately with a specified this, while bind returns a new function with a permanently bound this. call accepts arguments individually, apply accepts arguments as an array.
call(thisArg, arg1, arg2, ...) invokes the function immediately, setting this to thisArg and passing arguments individually. apply(thisArg, [argsArray]) does the same but accepts arguments as an array. bind(thisArg, arg1, arg2, ...) returns a new function with this permanently set to thisArg; it does not invoke the function immediately. Use call when you know arguments separately, apply when arguments are in an array, and bind when you need to create a reusable bound function. Example: function greet(greeting, punctuation) { console.log(greeting + ', ' + this.name + punctuation); } const obj = { name: 'Alice' }; greet.call(obj, 'Hello', '!'); greet.apply(obj, ['Hi', '?']); const boundGreet = greet.bind(obj, 'Hey'); boundGreet('!!');.