Size: a a a

JavaScript.Ninja

2020 May 14

ДП

Дима Полос in JavaScript.Ninja
Remite
На собесе надо говорить: А Вы что, сам не знаете, да? :)
)))) да, а пограничникам надо говорить: свои пора иметь!)
источник

D

DmitryZ in JavaScript.Ninja
Дима Полос
тут формулировка зависит от того, кому посыл, если ученикам - то вот "по-крестьянски" как раз и надо говорить, а если на собесе - то максимуму умных слов и кратких формулировок, чтоб у  интервьюера закипело при парсинге этого словесного стрима)))
Просто этот вопрос задают на каждом втором собесе и немного выбешивает когда ты как-бы понимаешь что это такое, объясняешь своими словами, а в ответ слышишь: "А если ещё немного подумать...?"
источник

VK

Vladimir Klimov in JavaScript.Ninja
DmitryZ
Просто этот вопрос задают на каждом втором собесе и немного выбешивает когда ты как-бы понимаешь что это такое, объясняешь своими словами, а в ответ слышишь: "А если ещё немного подумать...?"
Ну, тут зависит ещё от интервьюера)
Если у него в голове определение, которое вы должны в точности повторить - так и будет))
источник

VK

Vladimir Klimov in JavaScript.Ninja
Но вот как в английской Википедии - мне нравится
Но надо тогда быть готовым объяснять что такое "объекты первого порядка" и "лексическое окружение")
источник

ДП

Дима Полос in JavaScript.Ninja
DmitryZ
Просто этот вопрос задают на каждом втором собесе и немного выбешивает когда ты как-бы понимаешь что это такое, объясняешь своими словами, а в ответ слышишь: "А если ещё немного подумать...?"
та да))
источник

B

Baxxter in JavaScript.Ninja
Дима Полос
Замыкание - это механизм разрешения пространства имен внутри функции через служебное свойство [[scope]] у объекта-обертки этой самой функции, благодаря которому пространство имен родительских функций (вплоть до глобального) становится доступным внутри текущей.
а если нет "родительских функций"?
источник

ДП

Дима Полос in JavaScript.Ninja
Baxxter
а если нет "родительских функций"?
весь код исполняется в глобальном контексте, надо дописать "вплоть до глобального контекста"
источник

ДП

Дима Полос in JavaScript.Ninja
исправил)
источник

D

DmitryZ in JavaScript.Ninja
Vladimir Klimov
Функция, которая в рантайме ссылается на переменные, которые объявлены вне тела этой функции и не являются ее параметрами🤷‍♂
В таком случае можно чуток изменить вышеупомянутое определение:
Это способность функции в рантайме ссылаться на переменные которые объявлены вне её тела и не являются её параметрами.
источник

ДП

Дима Полос in JavaScript.Ninja
DmitryZ
В таком случае можно чуток изменить вышеупомянутое определение:
Это способность функции в рантайме ссылаться на переменные которые объявлены вне её тела и не являются её параметрами.
👍
источник

D

DmitryZ in JavaScript.Ninja
... и гарантированно получать то значение переменной, которое хранилось в ней до привязки её к функции, даже если после привязки её значение изменилось.
источник

B

Baxxter in JavaScript.Ninja
Дима Полос
весь код исполняется в глобальном контексте, надо дописать "вплоть до глобального контекста"
вот Вы сами себя и запутали) глобальный контекст выполнения или глобальная область видимости?
источник

ДП

Дима Полос in JavaScript.Ninja
Baxxter
вот Вы сами себя и запутали) глобальный контекст выполнения или глобальная область видимости?
глоб область видимости, я про это
источник

D

DmitryZ in JavaScript.Ninja
У меня есть потрясающая задачка на контекст и всякие окружения.

function f() {
this.x = 5;
(function() {this.x=3;})()
console.log(this.x);
}

var obj = {
x: 12,
method: () => {console.log(this.x)}
}

f();
new f();
obj.method();
obj.method.call(f);

Какие 4 значения будут выведены в консоль?
4-й вариант я вообще не понимаю как объяснить.
источник

IK

Illya Klymov in JavaScript.Ninja
DmitryZ
У меня есть потрясающая задачка на контекст и всякие окружения.

function f() {
this.x = 5;
(function() {this.x=3;})()
console.log(this.x);
}

var obj = {
x: 12,
method: () => {console.log(this.x)}
}

f();
new f();
obj.method();
obj.method.call(f);

Какие 4 значения будут выведены в консоль?
4-й вариант я вообще не понимаю как объяснить.
А что смущает
источник

ДП

Дима Полос in JavaScript.Ninja
1. f(); // 3
2. new f(); // 5
3. obj.method(); // 3
4. obj.method.call(f); // 3

1. Сначала f меняет window.x, потом IIFE меняет window.x на 3
2. new f() настраивает this внутри f на новый объект, у него x станет 5, и в консоль выведет функция f значение х у нового объекта
3. obj.method() вызовет стрелочную функцию, которая не будет работать с obj, а возьмет window.x, а там 3 после вызова функции f() во второй раз, там же еще IIFE внутри отработала, которая this видела как window, потому у window.x - 3
4. Все тоже самое, что в п.3, потому что контекст у лямбды не меняется
источник

ДП

Дима Полос in JavaScript.Ninja
У стрелочной функции контекст не подменить, она берет х у window
источник

D

DmitryZ in JavaScript.Ninja
Дима Полос
1. f(); // 3
2. new f(); // 5
3. obj.method(); // 3
4. obj.method.call(f); // 3

1. Сначала f меняет window.x, потом IIFE меняет window.x на 3
2. new f() настраивает this внутри f на новый объект, у него x станет 5, и в консоль выведет функция f значение х у нового объекта
3. obj.method() вызовет стрелочную функцию, которая не будет работать с obj, а возьмет window.x, а там 3 после вызова функции f() во второй раз, там же еще IIFE внутри отработала, которая this видела как window, потому у window.x - 3
4. Все тоже самое, что в п.3, потому что контекст у лямбды не меняется
а если четвёртый пункт заменить на такой:
obj.method.call(new f)
источник

ДП

Дима Полос in JavaScript.Ninja
obj.method там стрелочная функция, у нее нет this, она берет его из окружения, так что кол не подменит ей этого поведения
источник

AD

Andrey Dmitriyev in JavaScript.Ninja
John Galt
попробуй кидать не с локалхост:3012 а с 127.0.0.1:3012
Оказывается я не в то сети был 😶
источник