Q:

try...catch with addEventListener

The try...catch block is not capturing this error when it comes from an event listener registered on window. It's the same behaviour in Firefox, Chrome and Safari.
I realise that I could wrap the contents of the function but why doesn't it work in this form? I was hoping to wrap a large amount of code in this way and track errors silently.
try{

    function onLoad(){
        var a = b;
    }

    //onLoad(); //This is caught
    window.addEventListener('load', onLoad, false); //This is not caught

}
catch(e){
    console.log("Catch: ", e);
}

A:

This happened because this code:
window.addEventListener('load', onLoad, false); //This is not caught

run after the page has loaded. This code is executing after try catch block.
To get the required behavior you must use window.onerror.

