Вопрос:

Какова цель вызова (0, func) () в JS?

javascript

99 просмотра

1 ответ

6741 Репутация автора

На этот вопрос уже есть ответ здесь:

Я сталкивался с этим в коде, сгенерированном Бабелем из этого источника . Казалось бы, как-то охраняет требуемую функцию.

(0, _utilities.validateNextState)(nextDomainState, reducerName, action);

Я понимаю, как оператор запятой в скобках отбрасывает 0и возвращает validateNextStateфункцию, но почему бы просто не сделать:

_utilities.validateNextState(nextDomainState, reducerName, action);

Я предполагаю, что это тип защиты (например, защита границ замыканий или setTimeout делает вызов функции асинхронным), но я не могу понять, для чего он предназначен.

Автор: nathancahill Источник Размещён: 08.11.2017 11:26

Ответы (1)


3 плюса

332891 Репутация автора

Решение

Иногда таинственная семантика JavaScript, вероятно, является причиной. Выражение

(0, _utilities.validateNextState)

оценивает, конечно, ссылку на эту функцию. Тем не менее, поскольку оно находится в этом заключенном в скобки подвыражении, вызов функции, который находится за его пределами, будет выполнен без_utilities распознавания этого объекта в качестве контекста для вызова ( thisзначения). Таким образом, внутри validateNextStateфункции thisбудет либо undefinedссылка на глобальный объект, либо ссылка на нее, в зависимости от состояния режима «строгий».

Я подозреваю, что Babel делает это, потому что в исходном исходном коде вызов validateNextState()делается так, как если бы это была «голая» функция, а не метод объекта. Бабель не знает (вероятно), имеет ли значение какое-то значение thisдля этой конкретной функции, но он должен убедиться, что она вызывается безопасно.

Автор: Pointy Размещён: 08.11.2017 11:30
Вопросы из категории :
32x32