Seems attractive at first, but the problem for me is readability. It seems
to me that we are trained to understand variable assignments as happening
where they are written, e.g.

```js
persist let counter = 0;

counter++;
```

With the "persist" feature, the value of counter after `counter++` could be
67, or 189. However, it seems to me that we are trained to understand that
the value of counter after `counter++` would be 1. Because upon glance we
may have expected the let declaration to be executed each time where it is
written in the function.

On Tue, 17 Jul 2018 at 10:26 Neek Sandhu <neek.san...@outlook.com> wrote:

> It'd be really useful to have variables inside methods/functions that are
> initialized once, reused for subsequent calls and live as long as
> containing scope i.e the function itself.
>
> > not to be confused with `static` properties
>
> ## Use Cases
>
> Almost every app has a function or method that needs to "preserve" some
> state across multiple calls, a counter for example. Current ways out of
> this situation are either closures created with IIFE's or making those
> variables top-level. Both of which are ugly. I think the same could be done
> much more neatly with persistent variables.
>
> ## Example
>
> ```javascript
> function foo(n) {
>     // initialized on first call to foo, persists for subsequent calls
>     persist let counter =  0;
>
>     // this way JS engine won't have to recompile the pattern everytime
>     persist const httpRE = /^https?/;
>
>     counter++;
>     return n * a;
> }
> ```
>
> is 1:1 as
>
> ```javascript
> let foo = (() => {
>     let counter = 0;
>     const httpRE = /^https?/;
>     return (n) => {
>         counter++;
>         return  n * a;
>     }
> })()
> ```
>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to