# The most modern Javascript I know

a micropost *by [@bwasti](https://twitter.com/bwasti)*

****


Javascript has changed drastically since I first learned it.
I generally love the new (to me) features.

Below is a contrived example of code that uses a bunch of concepts
I *just* learned.  I'm not sure any of this is good practice, but here it is:


```javascript
class Thing {

  constructor(data) {
    this.data_ = data
    this.show_thing = true
    this.display_loop()
  }

  async display_loop() {
    while (this.show_thing) {

      this.display_thing()

      await new Promise((resolve) => {
        requestAnimationFrame(resolve)
      })
    }
  }
  
  display_thing() {
    const canvas = document.querySelector('#output_canvas')
    // ...
  }
  
  get data() {
    return this.data_
  }

}

const d = new Float32Array(128)
d.fill(11) // fill with the number 11
let t = new Thing(d)
```

## No Semicolons

Wait what the heck? I'm not complaining, though.  I'd often forget to type them and now
I don't need to care.  I still do though.  Sometimes.

## Classes

Not a bad addition.  The prototype stuff was awful.

## Async methods

Ok so I guess I can call these from non-async methods but I just can't await on them.
Are they even guaranteed to be executed?

## Promise creation

Is it just me or is this syntax kinda wonky?  I can't offer a better alternative though.

## `requestAnimationFrame`

I *guess* this is better than `setTimeout`, but I have no idea how long it'll be
until the next frame (unless I google it).

## Lambdas

These are great.  Mostly because there's no more `this` vs `this` BS to deal with.
I wish anonymous functions worked this way.

## `document.querySelector`

Basically just `$` from JQuery.  Dope.

## Getters and setters

Coming from C++ this is natural to me and I enjoy the syntactic sugar and safety they provide.

## `Float32Array`

Performance! As someone who works in machine learning I *love* this.

## `const`

Ok this is a bit weird.  The *name* is constant, but not the underlying data.
You can mutate it all you want if it's an object.  Bleh.

## `let`

Much better than `var`.  I'm glad I can stop using `var`.  I am now very pretentious
and judgemental of code that uses `var`.

## Other stuff not shown

There are now a ton of camera, microphone and even gyroscope APIs that can be accessed
directly from Javascript.  That's awesome.