Как называется моя безымянная «функция» в JavaScript?Javascript

Форум по Javascript
Ответить
Anonymous
 Как называется моя безымянная «функция» в JavaScript?

Сообщение Anonymous »

Хорошо, позвольте мне начать с изложения некоторых фактов, а затем мой вопрос.
Функции в JavaScript могут при желании сами иметь имена:
  • Код: Выделить всё

    (function f1() {}).name
    выдает 'f1', поскольку функция имеет имя при ее объявлении.
  • Код: Выделить всё

    (function () {}).name
    возвращает "", поскольку при объявлении функция не является именем.
Пока все хорошо.
  • Код: Выделить всё

    var f2 = function f3(); f2.name
    дает "f3", поскольку имя функции было определено путем просмотра именованной функции, назначенной f2 (которая на самом деле является просто "именем" и "указывает" на объект функции, созданный путем оценки выражения правой стороны), что само по себе является f3.
Еще раз, пока все хорошо.
Когда у вас есть безымянная функция в правой части (оцененное выражение), как в примере 2. выше, и вы немедленно*1 присваиваете ему имя, однако тогда функция будет иметь имя.
  • Код: Выделить всё

    var f4 = (function() {}); f4.name
    дает "f4" (круглые круглые скобки здесь необязательны и включены только для облегчения чтения)
Это начинает терять смысл, поскольку вещь в правой части оператора присваивания явно не имеет имени, но после того, как присвоение было завершено, теперь оно волшебным образом появляется, и имя как бы заимствовано из того же «локального имени», которому была назначена назначаемая вещь (функция).
Теперь вы могли бы сказать, что JS всегда присваивает имя безымянной функции, если эта (безымянная функция) присваивается локальному имени, и это также применимо при работе с немедленным присвоением безымянной функции другим «именованным» вещам (например, «именованному отображению», т. е. «словарю»):
  • Код: Выделить всё

    var o5 = {f5: function () {}}; o5.f5.name
    дает "f5"
  • Код: Выделить всё

    var o6 = {['']: function (){}}; o6[''].name
    выдает "" (возможно, потому что функция безымянна или потому, что она была присвоена именованному индексу с пустой строкой в словаре/объекте o6, думаю, мы никогда этого не узнаем)
НО
Когда ваше безымянное выражение не может быть немедленно распознано синтаксическим анализатором (и фактически требуется вычисление II[N]F (немедленно вызываемая функция [nameless]), то присвоенное имя «локального имени» не передается автоматически вычисляемой безымянной функции справа:
  • Код: Выделить всё

    var f7 = (() => (function () {}))(); f7.name
    выдает "", несмотря на то, что безымянная функция вычисляемого выражения в правой части присваивается имени ()
Это также относится к синтаксису индекса словаря: И в
  • Код: Выделить всё

    var o9 = {['']: (() => (function () {}))()}; o9[''].name
    дает "" (опять же, возможно, потому, что функция безымянна, или потому, что она была присвоена именованному индексу с пустой строкой в ​​словаре/объекте o6, мы тоже никогда не узнаем).
Итак, какое именно правило должны соблюдать JS-движки, когда имеют дело с присвоением (изначально) безымянной функции имени или нет?

Подробнее здесь: https://stackoverflow.com/questions/798 ... javascript
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»