Как javascript допускает синтаксис типа ключа объекта, не включая ir внутри литерала, а также объявление переменной внутри него? - PullRequest
0 голосов
/ 14 апреля 2020

При выполнении этого оператора в консоли chrome или внутри тега скрипта я обнаружил, что приведенный ниже синтаксис, который я считаю недействительным, работает, и все переменные отображаются глобально, что, как я понимаю, может быть связано с фигурными скобками, которые интерпретируются как блок, но этот ключ: впереди это то, что смущает меня. Но я не уверен почему и ищу объяснение.

    foo: {
      a = 5,
      b = 6
    }

    console.log(a) output --->  5
    console.log(b) output --->  6


    foo: {
      a = 5;
      b = 6;
    }

    console.log(a) output --->  5
    console.log(b) output --->  6


    foo: {
      a: 5;
      b: 6;
    }

    console.log(a) output --->  5
    console.log(b) output --->  6

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Это потому, что foo: интерпретируется как метка, а ваш "ObjectLiteral" интерпретируется как блок, а операторы внутри выполняются.

Ваш код сводится к следующему.

a = 5,
b = 6

Поскольку у вас нет объявлений, таких как var, let или const, вы устанавливаете глобальный переменная a и b

1 голос
/ 14 апреля 2020

Если вы объявляете переменную, просто присваивая ей (без использования let, const, var или в качестве параметра функции), тогда она является глобальной.

Метки ничего не делают, потому что у вас нет значений от l oop до continue (или аналогичных) от.

Блоки ничего не делают, потому что вы не используете let или const, которые бы охватывали переменную для блоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...