SV
а что в теле цикла?)
{ Amir }
Фауст
ничего же не будет, нет такой переменной.
SV
а ну это я вижу.. та вродь ошибка будет
SV
let там а не вар
SV
с варом прокатило бы кажись
{ Amir }
let там а не вар
Ага, всплытия не будет
{ Amir }
С варом было бы 10
SV
var смотрит за цикл ) а лет слишком строгий парень ))
{ Amir }
Что во второй задаче будет?
SV
Что во второй задаче будет?
ой чесно тут мне потупить чуток нужно )
Фауст
{ Amir }
Можешь порассуждать
{ Amir }
2 алерта будет?)
Что будет после вызова userSayHi?
Фауст
Привет
Фауст
Или нет?
{ Amir }
Привет
Почему привет?
{ Amir }
тут надо еще и объяснить
Фауст
Или не всё так просто. Вроде "привет" должен быть. В userSayHi ты используешь bind, на выходе она возвращает функцию с привязонным контекстом - user. Потом ты переписываешь свойство user.sayHi. Но userSayHi вернёт старый метод, потому мы до этого использовали bind.
Фауст
Как-то так
{ Amir }
Это же не встроенный bind
{ Amir }
Почему вернет старый метод?
{ Amir }
Как это работает?
SV
Да привет выведет ...я вот только дотупил ) пздец нужно эту тему перечитать всю...
Фауст
А почему bind делает так?
Потому что он первым аргументом берёт функцию, а вторым контекст. Ты при вызове bind передаёшь ему функцию, которая была на тот момент, а потом уже ты её переписал, но это значение уже не имеет. Главное, что при вызове она была другая)
SV
да... вот ты за меня всё и написал )) а если после вызова userSayHi() мы дёрнем user.sayHi то выведет он уже другой алерт ибо переписан
{ Amir }
Просто оставить вызов?
{ Amir }
func()?
Ага
Фауст
Тоже привет будет. Потом что опять же, ты передал функцию в первый аргумент и она там сохранилась.
{ Amir }
))
SV
не вродь так всё сломается
{ Amir }
не вродь так всё сломается
Во, интересный вариант
SV
мы выходит в function() { alert('Привет!'); } передадим всего юзера
SV
хотя я хызы как это отработает... а это законно вообще?)
{ Amir }
Там замыкания еще есть вроде, да?
Фауст
Да, там по факту контекст и не важен
{ Amir }
Да
Какие способом?
{ Amir }
Копировалась функция?
SV
хотя да.. тоже отработает... функции пофиг что ей отдали
Фауст
Через замыкания.
SV
ей отдали всего юзверя... и она выполнит тело
Фауст
Она сохранилась в локальной переменной (func) функции bind
{ Amir }
{ Amir }
А что же стало с ней когда мы поменяли метод?
{ Amir }
{ Amir }
Т.е. если вызовес x() то не будет такого как в bind?
Фауст
Ты условие поменял?
Фауст
Там вроде без х было
{ Amir }
Ты условие поменял?
твою темк расширяю
SV
блять думал вот так... function bind(func, context) { return function() { return func(context, arguments); }; }
SV
без apply а вы вон вообще пустую )
{ Amir }
Там вроде без х было
Было без Х, но ты сказал что там замыкание и поэтому там будет старый метод
Фауст
{ Amir }
Ну так мы же потом меняем метод на который ссылается Х
{ Amir }
И замыкания нет
{ Amir }
Подсказка?)
Фауст
Я наверное не правильно высказолся. По факту ты в X положил function () {alert("привет")}. В bind ушло тоже самое.
SV
короче в userSayHi просто запишет function() { alert('Привет!'); } и при вызове выполнит... это если return func() без параметров
{ Amir }
Разве Х при вызове не пойдет к user.sayHi?
Фауст
user.sayHi вернёт функцию, которую можно передавать куда хочешь, контекст не сохраняется
SV
короче... я над задачкой думал больше, чем мне дали бы времени на собесе... оо()
{ Amir }
В этом примере?
Фауст
А контекст нам нужен?
Нет, не нужен. С bind или без всё равно будет привет
{ Amir }
Вот только надо сказать что функция передается по ссылке
Фауст
Ну да, это же разновидность объекта)
{ Amir }
А apply, вопросы с контекстом и замыканиями это специально чтоб сбить
{ Amir }
Ну да, это же разновидность объекта)
Да, так и надо сказать, что передаем ссылку на функцию
Виктор
В х выведется