Hacker News new | ask | show | jobs
by AgentME 3937 days ago
> `const x = 2` feels great emotionally, but `const x = [2]` has the feeling of safety without any of the guarantee.

Const is perfectly sensible with references to mutable objects too. The latter guarantees that x will always point to the same mutable array. If you pass a reference to the x array to a function which needs to mutate that specific array or observe it for changes, then it may be important that x is never rebound to a different array. Consider the following code:

    const x = [5,6,7];

    Object.observe(x, function(changes) {
      console.log('changes', changes);
    });

    // ...
    // time to clear the array

    // WRONG! The code observing changes to the old x array will not see
    // this change or future changes to this new array. Because we used const, this
    // will trigger an error and immediately show us our mistake.
    x = [];

    // CORRECT. This mutates the array instead of creating a new empty array.
    x.length = 0;
1 comments

> If you pass a reference to the x array to a function

This notion (concern) is meaningless in JS, since when you pass any reference, it's always a reference-copy, so there's no value nor assistance that `const` provides.

Const usage prevents a bug in my example directly above!