Hacker News new | ask | show | jobs
by erkl 4182 days ago
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.
1 comments

    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.