No I think it's fairly common for events to pass the object raising the event and the event arguments to a handler.
I've seen it said that this is so events can be bubbled up through several handlers while retaining information from the original raiser.
ie
<page> <control> <button onclick="raiseevent"> </control> </page> function raiseevent(e) { console.log(e.target.name) } //output: //button However, it has been suggested that your solution 2, with context capture can always be used to wrap a function that requires a reference to the target. ie.
<button onclick="(e) => { e.target= this; raiseevent(e); }"> Although here you can see that because we have to cratecreate the binding declaratively in the markup you don't have a reference to the button. to use in the scope of the lambda