Подготовка к интервью на 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, если вам понравилась статья. Ваши ценные предложения всегда приветствуются.
Приятного обучения!!!