• TypeError: redeclaration of const

    From Mortifis@ALLEYCAT to All on Monday, August 19, 2019 07:58:07
    I have an xjs/ssjs script that, when called once works as expected, but when called a second time I get:

    TypeError: redeclaration of const

    If I wait a few minutes and run the script again it works as expected then craps out. Is this a web browser issue? I tried setting the const(s) to undefined and then delete(const) but that did not resolve the redeclaration issue.

    Any ideas?


    My doctor said I have the body of a 25 year old ... and the mind of a 10 :-/

    ---
    ■ Synchronet ■ AlleyCat! BBS - http://alleycat.synchro.net:81
  • From echicken@ECBBS to Mortifis on Monday, August 19, 2019 09:18:00
    Re: TypeError: redeclaration of const
    By: Mortifis to All on Mon Aug 19 2019 07:58:07

    I have an xjs/ssjs script that, when called once works as expected, but when
    called a second time I get:

    TypeError: redeclaration of const

    If I wait a few minutes and run the script again it works as expected then craps out. Is this a web browser issue? I tried setting the const(s) to undefined and then delete(const) but that did not resolve the redeclaration
    issue.

    The Synchronet webserver reuses the same JS context across multiple requests from the same client. It can take a few minutes for the client's session to expire and a new context to be created. So basically you may end up reusing the same global scope across multiple executions of a script.

    So using 'const' at the *top level* of an XJS/SSJS script is inadvisable. Use 'var' instead.

    It's okay to use 'const' inside of functions.

    It's probably also okay to wrap your entire script in an IIFE so that you get a fresh scope for each request. However, this context reuse was done for performance reasons, so you'd be sacrificing any performance gain by doing that.

    (function () {
    // This is an IIFE
    // It's an Immediately Invoked Function Expression
    })();

    ---
    echicken
    electronic chicken bbs - bbs.electronicchicken.com
    ■ Synchronet ■ electronic chicken bbs - bbs.electronicchicken.com
  • From Mortifis@ALLEYCAT to echicken on Monday, August 19, 2019 12:34:18

    The Synchronet webserver reuses the same JS context across multiple requests from the same client. It can take a few minutes for the client's session to expire and a new context to be created. So basically you may end up reusing the same global scope across multiple executions of a script.

    So using 'const' at the *top level* of an XJS/SSJS script is inadvisable. Use 'var' instead.

    It's okay to use 'const' inside of functions.

    It's probably also okay to wrap your entire script in an IIFE so that you get a fresh scope for each request. However, this context reuse was done for performance reasons, so you'd be sacrificing any performance gain by doing that.

    (function () {
    // This is an IIFE
    // It's an Immediately Invoked Function Expression
    })();


    Excellent, thank you!


    My doctor said I have the body of a 25 year old ... and the mind of a 10 :-/

    ---
    ■ Synchronet ■ AlleyCat! BBS - http://alleycat.synchro.net:81