update example code to use let/const instead of var
Pomax opened this issue · 3 comments
There's a lot of example code in the spec that uses var
, rather than let
/const
, thus very much not doing what one might think. var
does not follow "normal" block scoping rules, instead always being function or global scoped: a statement such as for (var x of inputs.values())
introduces a global variable x
, not a variable that is scoped to the loop, and does so at the start of the script because the JS parser will hoist it over to the start of the function/global scope before actually running the code.
As a fairly modern API, it would be a good idea to update all the code used to illustrate its use to use the normal block-scoped let
and const
, instead.
I totally understand your point and it would probably be a good idea to update the examples. However, there is nothing abnormal about using var
. It is a perfectly valid way of specifying variables which comes, as you stated, with its own set of scoping rules which are well-documented and probably known by developers who can tell the difference between var
, let
and const
.
Having said that, we probably want to promote contemporary coding practices. Can anyone see any reason why we should keep var
(besides inertia) ?
The examples have been moved to the explainer, and if there are no objections we can do this anytime.
There are actually two examples still in the main body of the spec, each of which uses var
three times:
- https://webaudio.github.io/web-midi-api/#MIDIInputMap
- https://webaudio.github.io/web-midi-api/#MIDIOutputMap
So I will move the milestone back to CR.