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