Challenge 2 — Solution Task: Create an object counter with a count property (0) and a method increment() that increases count by 1 and logs it. Extract increment as a standalone function, use bind() to lock it to counter, then call the bound version three times via setTimeout to prove this stays correct even when called asynchronously. const counter = { count: 0, increment() { this.count++; console.log(this.count); } }; const boundIncrement = counter.increment.bind(counter); setTimeout(boundIncrement, 100); setTimeout(boundIncrement, 200); setTimeout(boundIncrement, 300); Expected output (over ~300ms): 1 2 3 Notes: - counter.increment.bind(counter) returns a brand-new function with this permanently fixed to counter — calling boundIncrement on its own (the plain-call situation from this chapter) no longer loses this, because bind already locked it in beforehand. - setTimeout calls boundIncrement as a plain callback, exactly the situation that breaks an un-bound method (Fundamentals Chapter 8's callback problem) — bind is specifically what prevents that here. - All three calls update the SAME counter.count, since boundIncrement always refers back to the same counter object every time it runs.