Мета-теги в HTML - это специальные теги, которые располагаются внутри секции
<head> и содержат информацию о веб-странице. Они не отображаются на самой странице, но играют важную роль в SEO, социальных сетях и управлении браузером.Вот некоторые основные мета-теги и их назначения:
1. Charset - задает кодировку символов страницы.
<meta charset="UTF-8">
<!-- Устанавливает кодировку UTF-8, которая поддерживает множество языков и символов -->
2. Viewport - помогает адаптировать страницу для мобильных устройств.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Устанавливает ширину страницы в соответствии с шириной устройства и начальный масштаб -->
3. Denoscription - предоставляет описание страницы, которое может отображаться в результатах поиска.
<meta name="denoscription" content="Краткое описание содержимого страницы.">
<!-- Помогает поисковым системам понять содержание страницы и улучшает SEO -->
4. Keywords - указывает ключевые слова, связанные с содержимым страницы.
<meta name="keywords" content="HTML, CSS, JavaScript">
<!-- Используется для оптимизации поисковых систем, но сейчас имеет менее значительное влияние -->
5. Robots - задает инструкции для поисковых роботов.
<meta name="robots" content="index, follow">
<!-- Указывает, следует ли индексировать страницу и следовать по ссылкам на ней -->
Использование мета-тегов помогает улучшить видимость страниц в поисковых системах, оптимизировать отображение на мобильных устройствах и управлять поведением браузеров.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
В React обработка событий происходит с использованием синтаксиса, похожего на JavaScript, однако с некоторыми отличиями. Важно помнить, что события в React обрабатываются в стиле camelCase, и нужно передавать обработчики событий как функции.
Вот основные шаги для обработки событий в React:
1. Определение обработчика события: Определяется функция, которая будет обрабатывать событие.
function handleClick() {
alert('Кнопка нажата');
}
2. Привязка обработчика к компоненту: Обработчик события передается как атрибут JSX.
function MyButton() {
return (
<button onClick={handleClick}>
Нажми меня
</button>
);
}
3. Работа с состоянием: В случае работы с состоянием, можно использовать хук
useState.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
function handleClick() {
setCount(count + 1); // Увеличивает счетчик на 1
}
return (
<div>
<p>Счетчик: {count}</p>
<button onClick={handleClick}>
Увеличить
</button>
</div>
);
}
4. Передача параметров: Для передачи параметров в обработчик, можно использовать стрелочные функции.
function MyComponent() {
function handleClick(param) {
alert(`Переданный параметр: ${param}`);
}
return (
<button onClick={() => handleClick('Hello')}>
Нажми меня
</button>
);
}
Таким образом, обработка событий в React дает возможность взаимодействовать с пользователями и управлять состоянием компонентов на основе их действий.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7✍1🤔1
В TypeScript аннотации типов для функций помогают явно указать типы аргументов и возвращаемого значения. Это обеспечивает лучшую поддержку автозаполнения и раннее выявление ошибок. Вот основные способы использования аннотаций типов для функций в TypeScript.
1. Типизация аргументов функции:
function add(a: number, b: number): number {
return a + b; // Функция принимает два числа и возвращает число
}
2. Типизация функции без возвращаемого значения:
function logMessage(message: string): void {
console.log(message); // Функция принимает строку и ничего не возвращает
}
3. Функции с параметрами по умолчанию:
function multiply(a: number, b: number = 1): number {
return a * b; // Параметр b имеет значение по умолчанию
}
4. Функции с неопределенным количеством аргументов:
function concatenate(...args: string[]): string {
return args.join(' '); // Функция принимает переменное количество строк и возвращает их объединение
}
5. Типы функций как значения:
type MathOperation = (a: number, b: number) => number;
const subtract: MathOperation = (a, b) => a - b; // Использование типа для переменной функции
Использование аннотаций типов в функциях TypeScript делает код более читабельным и помогает избежать ошибок, связанных с несоответствием типов. Это особенно полезно в больших проектах, где четкое указание типов способствует лучшему пониманию логики и структуры кода.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
В CSS можно задать отступы (margin) для одной стороны элемента с помощью следующих свойств:
1. margin-top – отступ сверху
2. margin-right – отступ справа
3. margin-bottom – отступ снизу
4. margin-left – отступ слева
Пример использования:
.element {
margin-top: 20px; /* Отступ сверху */
margin-right: 10px; /* Отступ справа */
margin-bottom: 5px; /* Отступ снизу */
margin-left: 15px; /* Отступ слева */
}
Для задания отступа только с одной стороны, можно оставить остальные свойства без значения или установить их в 0:
.element {
margin-top: 20px; /* Отступ сверху */
margin-right: 0; /* Нет отступа справа */
margin-bottom: 0; /* Нет отступа снизу */
margin-left: 0; /* Нет отступа слева */
}
Также есть сокращенная запись для задания отступов:
.element {
margin: 20px 0 0 0; /* Отступ сверху 20px, остальные 0 */
}
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Условные операторы в JavaScript позволяют выполнять различные блоки кода в зависимости от выполнения определенных условий. Основные операторы:
if, else if и else.Пример работы условных операторов:
const temperature = 20; // Задаем переменную temperature
if (temperature > 25) {
console.log("Слишком жарко"); // Если температура больше 25, выводим это сообщение
} else if (temperature >= 15 && temperature <= 25) {
console.log("Умеренная температура"); // Если температура в диапазоне 15-25, выводим это сообщение
} else {
console.log("Прохладно"); // Если ни одно из предыдущих условий не выполнено, выводим это сообщение
}
Объяснение кода:
1. Условие в
if проверяет, превышает ли значение temperature 25.2. Если условие истинно, выполняется код внутри
if.3. Если условие ложно, проверяется
else if: возможно, температура находится в диапазоне от 15 до 25.4. Если указанные условия не выполнены, выполняется код в блоке
else.Эта конструкция позволяет гибко управлять логикой программы в зависимости от значений переменных.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
В HTML элементе
<input> атрибут type определяет тип. Основные типы input:- text: однострочное текстовое поле.
- password: для ввода пароля, скрывает символы.
- email: для ввода email, проверяет формат.
- number: поле для чисел.
- checkbox: флажок для выбора.
- radio: выбор одного из нескольких вариантов.
- submit: кнопка отправки формы.
Пример использования:
<!-- Текстовое поле -->
<input type="text" name="username">
<!-- Поле пароля -->
<input type="password" name="password">
<!-- Флажок согласия с условиями -->
<input type="checkbox" name="agree">
<!-- Кнопка отправки формы -->
<input type="submit" value="Submit">
Использование соответствующих типов input повышает удобство формы для пользователя и обеспечивает корректность введённых данных.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1
Синтетические события в React — это кроссбраузерная оболочка над нативными событиями браузера. React объединяет события различных браузеров в единый интерфейс, обеспечивая одинаковое поведение во всех окружениях.
Синтетические события имитируют поведение нативных событий и предоставляют те же свойства и методы. Это упрощает работу с событиями, избавляя от необходимости обрабатывать различия между браузерами.
Пример обработки события клика в React:
function handleClick(event) {
// Предотвращение стандартного поведения
event.preventDefault();
// Получение значений из события
const button = event.button; // Кнопка мыши
const target = event.target; // Элемент, на который кликнули
}
<button onClick={handleClick}>Click me</button>
В этом примере
event — это синтетическое событие React. Использование синтетических событий обеспечивает стабильную и предсказуемую обработку взаимодействий пользователя в приложениях.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4
Свойство
box-sizing в CSS определяет способ расчёта общей ширины и высоты элемента. Оно контролирует, включаются ли padding и border в размеры, заданные свойствами width и height.Основные значения:
- content-box (по умолчанию): размеры
width и height применяются только к содержимому. Padding и border добавляются сверху, увеличивая общий размер элемента.- border-box: размеры
width и height включают в себя содержимое, padding и border. Это облегчает расчёт размеров и предотвращает неожиданное увеличение элемента.Пример использования:
/* Применение border-box ко всем элементам */
* {
box-sizing: border-box;
}
Устанавливается для всех элементов, чтобы
width и height включали padding и borderИспользование
box-sizing: border-box помогает избегать проблем с расчётом размеров элементов.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
В JavaScript цикл
for используется для повторения блока кода определённое количество раз. Он состоит из трёх частей: инициализации, условия и итерации.Синтаксис:
for (initialization; condition; iteration) {
// Код, который будет повторяться
}
Например, вывести числа от 1 до 5:
for (let i = 1; i <= 5; i++) {
console.log(i); // Выводит числа от 1 до 5
}
- Инициализация:
let i = 1; объявляется переменная и устанавливается начальное значение.- Условие:
i <= 5; цикл продолжается, пока условие истинно.- Итерация:
i++ увеличивает значение переменной после каждой итерации.Цикл
for полезен, когда известно точное количество повторений.Для перебора элементов массива:
const array = ['a', 'b', 'c'];
for (let i = 0; i < array.length; i++) {
console.log(array[i]); // Выводит элементы массива
}
Этот цикл проходит по индексам массива от 0 до
array.length - 1.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Перегрузка функций в TypeScript позволяет одной функции поддерживать различные сигнатуры вызовов, обеспечивая гибкость типизации.
// Объявление перегруженных сигнатур
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
// Реализация функции
function combine(a: any, b: any): any {
if (typeof a === 'string' && typeof b === 'string') {
return a + b;
}
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
}
throw new Error('Неверные типы аргументов');
}
const result1 = combine('Hello, ', 'World!'); // Строка
const result2 = combine(10, 20); // Число
Каждая перегруженная сигнатура определяет допустимые типы аргументов и возвращаемое значение. Реализация функции должна обрабатывать все возможные варианты.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤔3
Свойство
display в CSS определяет, как элемент отображается на странице и как он влияет на окружающие элементы. Оно задает тип коробки (box) для элемента и определяет его участие в потоке документа.Основные значения:
-
block: Элемент отображается как блочный. Занимает всю ширину родителя, начинается с новой строки.-
inline: Элемент отображается как строчный. Не начинается с новой строки, размеры зависят от содержимого.-
inline-block: Комбинирует свойства block и inline. Элемент строчный, но поддерживает заданные ширину и высоту.-
none: Элемент не отображается и не занимает места в документе.Пример:
/* Элемент скрыт и не занимает места */
.hidden {
display: none;
}
/* Элемент отображается как строчно-блочный */
.button {
display: inline-block;
width: 100px;
height: 40px;
}
<!-- Блочный элемент -->
<div style="display: block;">Блочный div</div>
<!-- Строчный элемент -->
<span style="display: inline;">Строчный span</span>
<!-- Строчно-блочный элемент -->
<div style="display: inline-block;">Строчно-блочный div</div>
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥2
Синтетические события — это события, создаваемые фреймворками или библиотеками для абстрагирования работы с событиями в разных браузерах. Например, в React используется
SyntheticEvent, который обеспечивает единообразие интерфейса событий и корректную работу обработчиков независимо от особенностей браузера. Синтетические события облегчают обработку событий, устраняя необходимость учитывать различия в реализации DOM-событий.Нативные события — это события, предоставляемые самим браузером через DOM API. Они могут иметь различия в поведении и структуре в зависимости от браузера, что может усложнять разработку кроссбраузерных приложений.
Пример синтетического события в React:
function handleClick(event) {
// event — это SyntheticEvent в React
// Имеет единый интерфейс во всех браузерах
event.preventDefault();
}
Пример нативного события:
document.getElementById('myButton').addEventListener('click', function(event) {
// event — это нативное событие браузера
// Поведение может отличаться в разных браузерах
event.preventDefault();
});
Таким образом, синтетические события обеспечивают кроссбраузерную совместимость и упрощают работу с событиями, в то время как нативные события предоставляют прямой доступ к функционалу браузера, но могут требовать дополнительных усилий для обеспечения совместимости.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Объектная модель документа (DOM) — это программный интерфейс для HTML и XML документов, представляющий документ в виде дерева узлов. Каждый элемент, атрибут и текст рассматриваются как объекты, что позволяет скриптам динамически изменять содержимое, структуру и стиль веб-страницы.
DOM предоставляет методы и свойства для взаимодействия с элементами страницы: можно добавлять, удалять или изменять элементы, а также реагировать на действия пользователя. Это основа для создания динамичных и интерактивных веб-приложений.
Пример изменения содержимого элемента:
// Получение элемента по id
const element = document.getElementById('myElement');
// Изменение текста элемента
element.textContent = 'Новый текст';
Пример добавления нового элемента:
// Создание нового элемента div
const newDiv = document.createElement('div');
// Добавление текста в новый div
newDiv.textContent = 'Новый див';
// Вставка нового div в конец body
document.body.appendChild(newDiv);
Эти примеры демонстрируют, как с помощью DOM можно управлять содержимым страницы в реальном времени, создавая динамические и интерактивные интерфейсы.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥1
Цикл
for используется для повторения набора инструкций определённое количество раз или для перебора элементов коллекций, таких как массивы или объекты. Он позволяет автоматизировать выполнение повторяющихся операций.Стандартный цикл for состоит из трёх частей:
for (let i = 0; i < 10; i++) {
// Действия, выполняемые на каждой итерации
console.log(i);
}
1. Инициализация (let i = 0;) — установка начального значения счётчика.
2. Условие (i < 10;) — проверка, должна ли выполняться следующая итерация.
3. Изменение (i++;) — обновление счётчика после каждой итерации.
Цикл выполняется, пока условие истинно.
Перебор элементов массива:
const array = [1, 2, 3, 4, 5];
for (let i = 0; i < array.length; i++) {
// Вывод каждого элемента массива
console.log(array[i]);
}
Использование цикла for...of для массивов:
const array = ['a', 'b', 'c'];
for (const item of array) {
// Действия с каждым элементом массива
console.log(item);
}
Использование цикла for...in для объектов:
const obj = { x: 1, y: 2, z: 3 };
for (const key in obj) {
// Вывод ключа и соответствующего значения
console.log(key, obj[key]);
}
Циклы
for позволяют эффективно обходить структуры данных и выполнять операции над их элементами, делая код более компактным и читаемым.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
display: none и visibility: hidden — это CSS-свойства, которые управляют отображением элементов, но работают по-разному.display: none:
- Элемент полностью удаляется из потока документа.
- Не занимает места на странице.
- Браузер не рендерит элемент и его потомков.
- События не обрабатываются.
Пример:
.hidden-element {
display: none;
}
visibility: hidden:
- Элемент остаётся в потоке документа.
- Занимает место на странице.
- Браузер рендерит элемент, но не отображает его.
- Элемент сохраняет свои размеры и вклад в разметку.
- События могут по-прежнему обрабатываться.
Пример:
.invisible-element {
visibility: hidden;
}
Ключевые отличия:
- Пространство:
display: none удаляет элемент из разметки, а visibility: hidden оставляет место.- События: Элементы с
visibility: hidden могут продолжать реагировать на события в некоторых браузерах, тогда как с display: none — нет.- Наследование: Потомки элемента с
visibility: hidden могут быть видимыми, если у них задано visibility: visible.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
Кортежи (Tuples) в TypeScript позволяют создавать массивы с фиксированной длиной, где тип каждого элемента известен и может отличаться от других. Это обеспечивает более строгую типизацию и безопасность при работе с данными.
Объявление кортежа:
// Объявление кортежа с типами: string и number
let user: [string, number] = ["Alice", 30];
Здесь
user — это кортеж, где первый элемент должен быть строкой, а второй — числом.Доступ к элементам:
// Получение значений из кортежа
const name = user[0]; // "Alice"
// name имеет тип string
const age = user[1]; // 30
// age имеет тип number
Ограничения кортежей:
// Попытка присвоить неверный тип вызывает ошибку
user[0] = 42; // Ошибка: тип 'number' не может быть присвоен типу 'string'
// Доступ за пределами определённых индексов ограничен
user[2] = "extra"; // Ошибка: индекс 2 отсутствует в типе '[string, number]'
Кортежи предотвращают неправильное использование данных, обеспечивая соответствие типов на каждой позиции. Это полезно при работе с функциями, возвращающими несколько значений разных типов, и позволяет TypeScript предупреждать об ошибках на этапе компиляции.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1😎1
В обработчиках событий в React значение
this зависит от метода объявления функции и контекста её вызова.В классовых компонентах:
По умолчанию методы класса не привязаны к экземпляру, поэтому
this может быть неопределённым или не тем, что ожидается.Проблема без привязки:
class MyComponent extends React.Component {
handleClick() {
// 'this' может быть undefined
console.log(this);
}
render() {
return <button onClick={this.handleClick}>Нажми меня</button>;
}
}
Решения:
1. Явная привязка в конструкторе:
class MyComponent extends React.Component {
constructor(props) {
super(props);
// Привязка метода к экземпляру
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
// Теперь 'this' ссылается на экземпляр компонента
console.log(this);
}
render() {
return <button onClick={this.handleClick}>Нажми меня</button>;
}
}
2. Использование стрелочной функции:
class MyComponent extends React.Component {
// Объявление метода как стрелочной функции
handleClick = () => {
// 'this' автоматически привязан к экземпляру
console.log(this);
};
render() {
return <button onClick={this.handleClick}>Нажми меня</button>;
}
}
В функциональных компонентах:
С использованием хуков
this не применяется, так как функции не имеют собственного контекста this.
function MyComponent() {
const handleClick = () => {
// 'this' здесь не используется
console.log('Кнопка нажата');
};
return <button onClick={handleClick}>Нажми меня</button>;
}
Таким образом, в классовых компонентах значение
this внутри обработчика события зависит от привязки метода к экземпляру, тогда как в функциональных компонентах контекст this обычно не используется.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Теневой DOM (Shadow DOM) — это технология в веб-разработке, которая позволяет создавать инкапсулированные и изолированные DOM-деревья внутри веб-компонентов. Он скрывает внутреннюю структуру компонента от остальной части документа, предотвращая воздействие внешних стилей и скриптов на внутренние элементы компонента.
Теневой DOM позволяет:
- Инкапсулировать стили и разметку: Стили внутри теневого DOM не влияют на внешний документ и не затрагиваются внешними стилями.
- Избежать конфликтов стилей: Уникальность стилей внутри компонента предотвращает непредвиденные изменения из-за глобальных стилей.
Создание теневого корня:
// Получение хост-элемента
const host = document.getElementById('my-component');
// Создание теневого корня
const shadowRoot = host.attachShadow({ mode: 'open' });
// Добавление контента в теневой DOM
shadowRoot.innerHTML = `
<style>
/* Стили применяются только внутри теневого DOM */
p {
color: blue;
}
</style>
<p>Текст внутри теневого DOM</p>
`;
Пояснение:
- attachShadow: Метод, который создаёт теневой корень для хост-элемента.
- mode: 'open': Позволяет доступ к теневому DOM через свойство
element.shadowRoot. В режиме 'closed' доступ ограничен.Таким образом, теневой DOM предоставляет механизм для создания компонентов с собственными стилями и разметкой, обеспечивая модульность и переиспользуемость кода без риска стилистических конфликтов с остальной частью приложения.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Чтобы указать кодировку символов в HTML-документе, используется мета-тег
<meta> с атрибутом charset внутри элемента <head>. Это необходимо для правильного отображения символов на странице.Пример использования UTF-8 кодировки:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<noscript>Пример документа</noscript>
</head>
<body>
<p>Привет, мир!</p>
</body>
</html>
В этом примере атрибут
charset="UTF-8" сообщает браузеру использовать кодировку UTF-8 для интерпретации символов.Особенности:
- Расположение мета-тега: Метатег с кодировкой должен быть указан в начале секции
<head>, желательно перед любыми другими мета-тегами и ссылками на стили или скрипты.- Важность указания кодировки: Если кодировка не указана или указана неверно, браузер может неправильно отображать символы, особенно если документ содержит специальные или национальные символы.
Альтернативный вариант для HTML5:
<meta charset="UTF-8">
Для более старых версий HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Однако в современных документах рекомендуется использовать первый вариант с атрибутом
charset.Указание правильной кодировки обеспечивает корректное отображение текстового контента и предотвращает проблемы с нечитаемыми символами на странице.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ключевое слово
readonly в TypeScript используется для определения свойств объектов, которые нельзя изменить после их первоначальной установки. Это повышает безопасность кода, предотвращая непреднамеренные изменения данных.Применение с интерфейсами:
interface User {
readonly id: number;
name: string;
}
const user: User = { id: 1, name: "Alice" };
// Попытка изменить readonly-свойство вызовет ошибку
user.id = 2; // Ошибка: нельзя присвоить значение свойству "id", так как оно только для чтения
Использование с классами:
class Point {
readonly x: number;
readonly y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
const point = new Point(10, 20);
// Попытка переопределить свойства
point.x = 15; // Ошибка: свойство "x" только для чтения
Для массивов:
const arr: ReadonlyArray<number> = [1, 2, 3];
// Методы, изменяющие массив, недоступны
arr.push(4); // Ошибка: метод "push" не существует на типе readonly массив
readonly обеспечивает неизменность данных после их инициализации, что помогает предотвращать ошибки и делает код более предсказуемым.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4