Продвинутая работа с функциями Flashcards

1
Q

Какие есть свойства у функции ? Для чего может использоваться свойство length ?

A

length,name. Свойство length иногда используется для интроспекций в функциях, которые работают с другими функциями.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое Named Function Expression ? Какие особенности у NFE ? Какую проблему это решает ?

A

NFE – это термин для Function Expression, у которого есть имя.
Есть две важные особенности имени func, ради которого оно даётся:

Оно позволяет функции ссылаться на себя же.
Оно не доступно за пределами функции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Можно ли сделать NFE с function declaration

A

NO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Синтаксис new Function. Какая особенность окружения у такой функции ?

A

let func = new Function ([arg1, arg2, …argN], functionBody);
Функции, объявленные через new Function, имеют [[Environment]], ссылающийся на глобальное лексическое окружение, а не на родительское. Поэтому они не могут использовать внешние локальные переменные

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какие два метода планирования существуют ? В чем их отличие ?
Синтаксис для создания методов

A

Для этого существуют два метода:

setTimeout позволяет вызвать функцию один раз через определённый интервал времени.
setInterval позволяет вызывать функцию регулярно, повторяя вызов через определённый интервал времени.

let timerId = setTimeout(func|code, [delay], [arg1], [arg2], …);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Сборка мусора и колбэк setTimeout/setInterval

A

Когда функция передаётся в setInterval/setTimeout, на неё создаётся внутренняя ссылка и сохраняется в планировщике. Это предотвращает попадание функции в сборщик мусора, даже если на неё нет других ссылок.

// функция остаётся в памяти до тех пор, пока планировщик обращается к ней
setTimeout(function() {…}, 100);
Для setInterval функция остаётся в памяти до тех пор, пока не будет вызван clearInterval.

Есть и побочный эффект. Функция ссылается на внешнее лексическое окружение, поэтому пока она существует, внешние переменные существуют тоже. Они могут занимать больше памяти, чем сама функция. Поэтому, если регулярный вызов функции больше не нужен, то лучше отменить его, даже если функция очень маленькая.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что лучше использовать для точной задержки по времени ?

A

Вложенный SetTimeout

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Перечислите флаги свойств объекта и за что они отвечают ?

A

Помимо значения value, свойства объекта имеют три специальных атрибута (так называемые «флаги»).

writable – если true, свойство можно изменить, иначе оно только для чтения.
enumerable – если true, свойство перечисляется в циклах, в противном случае циклы его игнорируют.
configurable – если true, свойство можно удалить, а эти атрибуты можно изменять, иначе этого делать нельзя.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какой Метод позволяет получить полную информацию о свойстве ?

A

Метод Object.getOwnPropertyDescriptor позволяет получить полную информацию о свойстве.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Каким методом можно изменить флаги ? Как он работает если свойства нет ?

A

Object.defineProperty(obj, propertyName, descriptor)

Если свойство существует, defineProperty обновит его флаги. В противном случае метод создаёт новое свойство с указанным значением и флагами; если какой-либо флаг не указан явно, ему присваивается значение false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что делает Флаг неконфигурируемого свойства (configurable:false) ? Пример такого флага

A

Неконфигурируемое свойство не может быть удалено, его атрибуты не могут быть изменены.
Например, свойство Math.PI – только для чтения, неперечислимое и неконфигурируемое:
Определение свойства как неконфигурируемого – это дорога в один конец. Мы не можем изменить его обратно с помощью defineProperty.

Обратите внимание: configurable: false не даст изменить флаги свойства, а также не даст его удалить. При этом можно изменить значение свойства.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Какие два вида свойств у объекта существуют ?

A

Первый тип это свойства-данные (data properties). Мы уже знаем, как работать с ними. Все свойства, которые мы использовали до текущего момента, были свойствами-данными.

Второй тип свойств мы ещё не рассматривали. Это свойства-аксессоры (accessor properties). По своей сути это функции, которые используются для присвоения и получения значения, но во внешнем коде они выглядят как обычные свойства объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Чем представляются свойства- аксеcсоры ? Синтаксис методов? Когда срабатывают эти методы ? Как они вызываются ?

A

Свойства-аксессоры представлены методами: «геттер» – для чтения и «сеттер» – для записи. При литеральном объявлении объекта они обозначаются get и set

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Чем отличаются дескрипторы свойств аксессоров ?

A

Свойства-аксессоры не имеют value и writable, но взамен предлагают функции get и set.

То есть, дескриптор аксессора может иметь:

get – функция без аргументов, которая сработает при чтении свойства,
set – функция, принимающая один аргумент, вызываемая при присвоении свойства,
enumerable – то же самое, что и для свойств-данных,
configurable – то же самое, что и для свойств-данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly