cross-posted from: https://lemmy.world/post/10094818

spoiler

Gender variability as declarations in JavaScript: const / let / var

Meme is based on Jordan Peterson “approival / disapproval” format, him being a conservative who disapproves of gender fluidity.

Transcript:

  • Jordan Peterson approval image: const gender;
  • Jordan Peterson angry image: let gender;
  • Jordan Peterson crying image: var gender;
    • Phen@lemmy.eco.br
      link
      fedilink
      arrow-up
      28
      ·
      1 year ago

      Last one can be freely changed by anyone, the middle one still has some restraints.

      • soloner@lemmy.world
        link
        fedilink
        arrow-up
        22
        ·
        1 year ago

        Reassignment isn’t the same as mutation. But mutation depends on the type of value. If gender was a string like “female” it wouldn’t be mutable cuz strings are immutable in JS.

      • andrew@lemmy.stuart.fun
        link
        fedilink
        English
        arrow-up
        7
        ·
        1 year ago

        var isn’t global unless it’s not inside a function. var is just function scoped, with declaration auto hoisted to the beginning of the function. let is a little more intuitive since you can’t refer to it before it’s been declared and has block scope rather than function scope.

          • CheezyWeezle@lemmy.world
            link
            fedilink
            arrow-up
            3
            ·
            edit-2
            1 year ago

            Kind of. With hoisting, the compiler/interpreter will find variable declarations and execute them before executing the rest of the code. Hoisting leaves the variables as undefined until the code assigning the value to the variable is executed. Hoisting does not initialize the variables.

            For example:

            console.log(foo);
            var foo;
            //Expected output: console logs ‘null’

            foo = ‘bar’;
            console.log(foo);
            var foo;
            //Expected output: console logs ‘bar’

            console.log(foo === undefined);
            var foo;
            //Expected output: console logs ‘true’

            This means you can essentially write your code with variable declarations at the end, but it will still be executed as though the declarations were at the beginning. Your initializations and value assignments will still be executed as normal.

            This is a feature that you should probably avoid because I honestly cannot think of any good use case for it that won’t end up causing confusion, but it is important to understand that every variable within your scope will be declared at the beginning of execution regardless of where it is written within your code.

          • andrew@lemmy.stuart.fun
            link
            fedilink
            English
            arrow-up
            2
            ·
            edit-2
            1 year ago
            var a;
            (function() {
              a='hoisted';
              console.log(a);
              var a;
            })()
            console.log(a);
            

            Should log hoisted and then undefined, showing that you’ve assigned to the later-declared var a which was hoisted vs the external global a.

    • Sarsoar@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      28
      ·
      1 year ago

      In JavaScript, a const variable is an immutable constant that you cannot reassign. Similar to how many conservatives think of gender, an intrinsic fact of a person that you can only read, but never change.

      The “let” keyword declares a variable in a local scope, the nearest surrounding curly braces. It can be changed in that scope, but does not exist anywhere else. I assume this is meant to concede that gender is a spectrum and your presentation can kind of wiggle, such as between “very manly” and “not as manly” but still a man. Like, a stereotypical lumberjack and a stereotypical twink are both men so there isn’t “one way to be a man” but a conservative might say " but they are still men, you can change how you present but you can’t change sex".

      The “var” keyword lifts the variable definition to the top of the function, or “hoists” it up. A variable declared with var can be accessed and modified anywhere after the block it was declared in. Gender is a spectrum and it can be reassigned anywhere, at anytime, to anything.

      • Doc Avid Mornington
        link
        fedilink
        English
        arrow-up
        4
        ·
        1 year ago

        I interpret it a bit differently. After all, a variable declared with var isn’t really more capable of being rebound, or bound to more values, than one declared with let. However, it is possible, with var, that setting a variable in one place could change it unexpectedly in another, so Rose Noble coming out as trans could cause Jordan Peterson to also suddenly be a woman.

      • domdel@lemmy.ml
        link
        fedilink
        arrow-up
        2
        arrow-down
        8
        ·
        1 year ago

        The “var” keyword lifts the variable definition to the top of the function, or “hoists” it up. A variable declared with var can be accessed and modified anywhere after the block it was declared in. Gender is a spectrum and it can be reassigned anywhere, at anytime, to anything.

        similar to how most liberals think of gender

    • Tyfud@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      Const keyword means constant, a value that won’t change after the application has been compiled; this allows for certain optimizations.

      Let keyword is a JavaScript variable that is safely scoped down to the method or function level.

      Var keyword is generally discouraged in JavaScript, because it’s a global declaration. The value of it could be available anywhere in the application, and the app might have collisions.

      So, the meme is, shifting from a constant, unchanging gender, to the middle where gender is defined and scoped to a local level, to the extreme, where gender is variable globally.