лексический это и замыкания - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь понять, как функция стрелки, переданная в setTimeout, запоминает значение this из предыдущего контекста выполнения. Я знаю, что значение this ищется с использованием лексических правил видимости при выполнении функций стрелок. Означает ли это, что функция стрелки закрывает переменные и ключевое слово this?

var obj = {
  name: 'TestName',
  func: function() {
    console.log(this)
    setTimeout(() => console.log(this), 1000)
  }
}

obj.func() //{name: "TestName", func: ƒ}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Означает ли это, что функция стрелки закрывается над ключевым словом this?

Да, именно так и происходит.

0 голосов
/ 03 июля 2018

На самом деле смысл использования жирной стрелки заключается в наследовании родительской области видимости. Основное применение функций со стрелками - удаление родительской области видимости. Когда мы вызываем setTimeout, цепочка происходит следующим образом:

  1. Вызов в Стек вызовов .
  2. Передается в Web-браузер API пробел, который ожидает до интервала времени.
  3. Теперь, после истечения интервала времени, он будет обработан Event-Loop , который переведет его в JS-очередь .
  4. Выполнение команды будет ожидать завершения выполнения других элементов в очереди, а затем снова будет передавать поток выполнения в Call-Stack всякий раз, когда он пуст.
  5. Теперь команда внутри setTimeout будет выполнена.

    поток выполнения JS

...