fn.call(thisArg, a, b) invokes with a chosen this and individual args; fn.apply(thisArg, [a, b]) takes an args array. fn.bind(thisArg) doesn't call — it returns a new function with this locked in, ideal for passing methods as callbacks without losing context.