Выбор ответа Senior Web API и воркеры обновлено

Transferable: передача ArrayBuffer в воркер

Вопрос

Что выведет код в главном потоке?

const buf = new ArrayBuffer(1024);
worker.postMessage(buf, [buf]);
console.log(buf.byteLength);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 0. Второй аргумент это список transferable-объектов.

Варианты ответа

  1. 1024
  2. undefined
  3. Будет выброшена ошибка
  4. 0правильный ответ

Разбор

Второй аргумент это список transferable-объектов. Буфер не копируется, а передаётся воркеру, и в отправителе он становится отсоединённым (detached) с byteLength === 0. 1024 было бы при обычном копировании. Ошибки нет: чтение длины у отсоединённого буфера разрешено. undefined тоже нет, свойство остаётся числом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме