If it were truly "non-render blocking" there would be CONTENT semantically marked up for it to show BEFORE any of the scripting started. Without that you just have a staggered scripting load.
... and assuming that was used to deliver actual content, a WCAG violation.
Oh, and if your last "else" is a return false and all other conditions return, you don't need to else. :D
Also if you actually look at a page's load order, you don't NEED to play with that silly async property or any of the rest of the extras. Move the scripting to right before </body> so that the DOM exists and rendering already has started. Putting them into <head> is part of what makes them blocking, especially your first one.... REGARDLESS of what tricks you play inside the scripts themselves!
-- edit -- also this is 2018, you can stop saying type="text/javascript" and realistically if you need to set the charset of the scripting in the markup, there's something WRONG with your scripting or the server delivering it... and of course pixel metric font sizes are inaccessible crap... NOT that setting it on the HTML tag makes one lick of sense.