Я узнал сегодня на уроке

"Объектно-ориентированное программирование".

парадигма программирования, основанная на концепции объектов, которые могут содержать данные в виде полей (часто называемых атрибутами или свойствами ) и код в виде процедур (часто называемых методами). Особенностью объектов являются процедуры объекта, которые могут обращаться и часто изменять поля данных объекта, с которым они связаны (у объектов есть понятие это или я).

Можете ли вы предложить вариант использования нового синтаксиса функции стрелки =>? Чем этот новый синтаксис отличается от других функций?

Выражение стрелочной функции — это синтаксически компактная альтернатива обычному функциональному выражению, хотя и без собственных привязок к ключевым словам this, arguments, super или new.target. Выражения стрелочных функций плохо подходят в качестве методов, и их нельзя использовать в качестве конструкторов.

Более короткий синтаксис.

Синтаксис ES5 для синтаксиса ES6.

function funcName(params) {
   return params + 2;
 }funcName(2);
// 4

Объясните разницу в использовании foo между function foo() {} и var foo = function() {}

По сути, первая — это фактическая именованная функция. Второй — это обычное объявление переменной с прикрепленной к ней анонимной функцией. Есть некоторые тонкие различия… они хорошо суммированы здесь:

Неоднозначность объявления функции JavaScript

Можете ли вы привести пример деструктуризации объекта или массива?

Назначение деструктурирования ES6 упрощает извлечение этих данных.

Примеры ниже.

var introduction = ["Hello", "I" , "am", "Sarah"];
    var greeting = introduction[0];
    var name = introduction[3];

    console.log(greeting);//"Hello"
    console.log(name);//"Sarah"

Если мы хотим извлечь данные с помощью массивов, это довольно просто сделать с помощью деструктурирующего присваивания. Давайте обратимся к нашему первому примеру для массивов. Вместо того, чтобы повторять этот повторяющийся процесс, мы сделаем это.

var introduction = ["Hello", "I" , "am", "Sarah"];
    var [greeting, pronoun] = introduction;

    console.log(greeting);//"Hello"
    console.log(pronoun);//"I"

Мы также можем сделать это с тем же результатом.

var [greeting, pronoun] = ["Hello", "I" , "am", "Sarah"];

    console.log(greeting);//"Hello"
    console.log(pronoun);//"I"

Объясните Закрытие.

Замыкание — это комбинация функции, связанной (вложенной) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции.

function init() {
  var name = 'Mozilla'; // name is a local variable created by init
  function displayName() { // displayName() is the inner function, a closure
    alert(name); // use variable declared in the parent function
  }
  displayName();
}
init();

init() создает локальную переменную с именем name и функцию с именем displayName(). Функция displayName() — это внутренняя функция, которая определена внутри init() и доступна только в теле функции init(). Обратите внимание, что функция displayName() не имеет собственных локальных переменных. Однако, поскольку внутренние функции имеют доступ к переменным внешних функций, displayName() может получить доступ к переменной name, объявленной в родительской функции init().