Функция вызывается перед попыткой найти неопределенную функцию.
В выражении как
objectReference.propertyName(arg1, arg2, arg3)
спецификация языка предусматривает, что аргументы оцениваются до того производится любой тест, чтобы определить, является ли ссылка функция на самом деле действует. Таким образом, ваш вызов foo()
в списке аргументов оценивается, и только после того, как его значение известно, есть какой-либо тест, сделанный, чтобы проверить, относится ли ссылка на свойство к реальной функции.
Here is the relevant portion of the spec. Шаг 3 - это оценка аргументов, а шаг 4 - это тест, чтобы проверить, является ли вещь, которую код говорит для вызова как функции, фактически является функцией.
Код должен быть размещен ** здесь **. – Pointy
Почему * не будет * он «работает»? Он выполняет именно то, что запрашивается. – user2864740
'foo()' вызывается до того, как движок js выдает ошибку, связанную с несуществующей функцией. –