Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Remember, it's not the function that's throwing the exception, it's the runtime. In order to make it not throw an exception, we'd have to special case typeof to make the runtime behave differently just for it. /That/ is inconsistent.


This throws an error:

    typeof x; // throws an error
    let x = 1;
This doesn't:

    typeof x; // returns "undefined"
    var x = 1;
While using variables before declaring them is bad practice, I think it's fair to argue that this behaviour is inconsistent.


    let x = 0;
    function typeof_wrapper(y) { return typeof y; }

    (function() {
        typeof_wrapper(x); // throws an error
        let x = 1;
    })();

    (function() {
        typeof_wrapper(x); // returns "undefined"
        var x = 1;
    })();
Again, typeof isn't throwing the error, the runtime is, because a variable declared with "let" is being referenced before the declaration. It's not inconsistent, it's one of the main points of "let".

You're essentially arguing that a feature added because the old behaviour was undesirable is inconsistent because it's not exhibiting the old undesirable behaviour.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: