Подготовка к интервью на Javascript — часть 1

Привет всем, в этой серии статей мы рассмотрим некоторые обычные и важные концепции ядра JS, которые задают во время интервью. Эта серия, несомненно, так или иначе сделает вас лучшим JS-разработчиком. Пожалуйста, не забудьте подписаться, если вам понравилась эта статья, в будущем таких статей будет больше. С этого и начнем…

Неявное и явное связывание

var obj = {
  name: "wisdomBearer",
  display: function(){
    console.log(this.name);
  }
};

var obj1 = {
  name: "Random"
};

obj.display()
// implicit binding: outputs "wisdomBearer" as "this" will get implicitly binded to "obj"

obj.display.call(obj1);
// explicit binding: outputs "Random" as "this" will get expicitly binded to "obj1"

Я надеюсь, что приведенный выше пример поясняет разницу между явной и неявной привязкой в ​​JS, а также то, как с помощью метода call() мы можем реализовать явную привязку.
Но здесь есть загвоздка. , если мы используем стрелочную функцию вместо обычной функции (как использовалось выше), то this не будет указывать на obj1, а будет указывать на глобальный/оконный объект.

var obj = {
  name: "wisdomBearer",
  display: () => {
    console.log(this.name);
  }
};

obj.display();
// outputs --> undefined

Бесконечное каррирование

// below program will run for any number of arguements
function add(a){
  return function(b){
    if (b) return add(a+b);
    return a;
  }
};

console.log(add(5)(2)(3)());
// outputs --> 10
console.log(add(6)(9)());
// outputs --> 15

Объяснение: Всякий раз, когда метод add() вызывается с аргументом, он возвращает функцию, и эта функция принимает аргумент как b,теперь, если это «b» не имеет никакого значения, наша функция просто вернет «a». В противном случае он будет рекурсивно вызывать метод add() с суммой наших «a» и «b» (передаются первые два аргумента). Пожалуйста, прокомментируйте, если у вас все еще есть проблемы с пониманием, обязательно постараюсь объяснить более подробно.

Затенение

function test() {
  let a = "hello";
  
  if(true){
    let a = "hi";
    console.log(a);
    // O/P: hi
  }
  console.log(a);
  // O/P: hello
}

Затенение — обычное поведение, возникающее при работе с переменными let. «var» также выполняет затенение, но скорее постоянное затенение (как показано ниже), а не временное, как это делает «let» (как показано выше).

function test() {
  var a = "hello";
  if(true){
    var a = "hi";
    console.log(a);
    // O/P: hi
  }
  console.log(a);
  // O/P: hi
}

Кроме того, важно иметь в виду, что мы можем скрыть «var» с помощью «let», но обратное невозможно.

function test() {
  var a = "hello";
  let b = "hello";
  if(true){
    let a = "hi";
    console.log(a);
    // outputs: "hi"
    var b = "hi";
    // ERROR: 'b' has already been taken
  }
}

Карта, фильтрация и уменьшение

Map() используется для создания нового массива из существующего путем применения метода к каждому элементу массива. Он может иметь 3 параметра.

const nums = [1,2,3,4];
const addThree = nums.map((num, index, nums) => {
  console.log("This is each element: ", num);
  console.log("This is each element's index: ", index);
  console.log("This is whole array: ", nums);
  return num + 3;
})
console.log(addThree);
// outputs: [4,5,6,7]

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

const nums = [1,2,3,4];
const moreThanTwo = nums.filter((num, index, nums) => {
  console.log("This is each element: ", num);
  console.log("This is each element's index: ", index);
  console.log("This is whole array: ", nums);
  return num > 2;
});
console.log(moreThanTwo);
// outputs: [3,4]

Reduce() используется для уменьшения значений массива до одного значения.

const nums = [1,2,3,4];
const sum = nums.reduce((accumulator, num) => {
  console.log("This is result after each iteration(starting from 0): ", num);
  return accumulator + num;
}, 0)

Заключение

Это подводит нас к концу части 1 этой статьи. Надеюсь, вы узнали/пересмотрели некоторые ценные концепции JS. Вскоре будет доступна часть 2, в которой также будет создаваться полифилл для вышеуказанных методов. Пожалуйста, не забудьте поставить CLAP, если вам понравилась статья. Ваши ценные предложения всегда приветствуются.
Приятного обучения!!!