Q1.

Выход

welcome
hello

Объяснение

var является областью действия функции, поэтому, когда msg объявляется внутри блока if, он переопределяет msg в глобальной области. Этого не происходит с let, поскольку он имеет блочную область видимости.

Q2.

Выход

5
5
5
5
5

Объяснение

Поскольку var является областью видимости функции, переменная i сохраняет значение 5 после завершения цикла. Функция обратного вызова в setTimeout получает одно и то же значение для каждого случая.

Решение

  • Преобразуйте var в let, чтобы создать область действия для каждой итерации.

  • Оберните setTimeout анонимной функцией. Передача i в качестве параметра ограничивает его область действия анонимной функции, и поэтому значение не теряется.

Q3.

Выход

{ foo_1: 'Hello' }

Q4.

Выход

1,2,34,5,6

Объяснение

String([1,2,3]); is "1,2,3"

Следовательно, "1,2,3" + "4,5,6" это "1,2,34,5,6"

Q5. Какой порядок исполнения?

Выход

1
4
3
2

Объяснение

Приоритет для цикла событий: стек вызовов ›микрозадача› макрозадача

Сначала выполняется весь синхронный код

Следовательно, логи 1, 4

Далее идут Promise и setTimeout

Обратный вызов обещания хранится в microtask queue, а обратный вызов setTimeout хранится в macrotask queue

microtask имеет более высокий приоритет по сравнению с macrotask. Таким образом, он регистрирует 3, за которым следует 2

Q6.

Выход

string

Объяснение

Оценивайте справа налево

  1. typeof 1 номер возврата
  2. typeof 'number' возвращает строку

Q7.

Решение

true

Объяснение

Значение по умолчанию для Math.max() - -Infinity, значение по умолчанию для Math.min() - Infinity.

Следовательно, -Infinity < Infinity это true

Q8.

Выход

function

Объяснение

За счет одного раунда синтаксического анализа (подъема) код выглядит так

Из-за этого последнее доступное значение для foo - function

Q9.

Выход

false

Объяснение

Он начинается слева направо, поэтому 3 > 2 равно true

true > 1 эквивалентно 1 > 1, то есть false

Q10.

Выход

global obj

Объяснение

При выполнении fn() значение this равно window, а window.str - global.

.call() присваивает this obj, а obj.str равно obj

Примечание. Это решение работает в non-strict режиме.

Спасибо за чтение 💙

Подпишитесь на @ codedrops.tech, чтобы узнать больше.

InstagramTwitterFacebookLinkedin

codedrops.tech