Показать сообщение отдельно
  #6 (permalink)  
Старый 12.11.2014, 18:07
Новичок на форуме
Отправить личное сообщение для xaser Посмотреть профиль Найти все сообщения от xaser
 
Регистрация: 12.11.2014
Сообщений: 6

Все равно не догоняю.
В 15.3.4.4 сказано про "При вызове методом call объекта func"
Тут под вызовом метода имеется ввиду наличие property accessor, ведь так? То бишь func.call || func['call'].

Ок. Имеем Function.prototype.call - объект func + Function.prototype.call.call - собственно сам метод.

Итак, приступим.
1. IsCallable = true, едем дальше
2, 3. формируем список аргументов, у нас он пустой
4. Вызываем [[Call]] у объекта func (первый call в нашем случае), куда передаем this, равный анонимной функции и пустой список аргументов.
Далее по 13.2.1:
5. Формируем новый execution context, где this будет указывать на анонимную ф-ию
6. Вычисляем FunctionBody (для (2) - это код ф-ии, для (1) - видимо, внутренний код call)

Так вот на этом этапе для (2) - все предельно понятно.
Тогда как для (1) - какая-то магия заставила первый call вызвать [[Call]] у this. Т.е это уже не property accessor, когда мы call через точку присоединяем к функции.
Тут call вдруг "посчитал", что нужно переданный this выполнить в качестве функции.

В общем, либо я сильно торможу, либо не вижу, где этот момент в стандарте описан, либо и то и другое)

Последний раз редактировалось xaser, 12.11.2014 в 18:12.
Ответить с цитированием