[{"data":1,"prerenderedAt":1291},["ShallowReactive",2],{"$ftIpHr_eVOTgZglwF4lmNSJj3Rz3p6mkokG3gt4R90Bc":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":80,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":83,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":409,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":412,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":656,"mdc--v5t99a-key":676,"mdc--m9mtaz-key":707,"mdc-zaslr5-key":724,"mdc--4k48xb-key":732,"mdc--uu08eh-key":740,"mdc--if11u1-key":781,"mdc-adtbe2-key":796,"mdc--p5n0zr-key":890,"mdc-zgej8n-key":907,"mdc--oxg4nl-key":925,"mdc--k32smb-key":972,"mdc--5gqgp0-key":1138,"mdc--nehz8v-key":1204,"mdc--tmpqgz-key":1221,"mdc--al3qhk-key":1253},{"content":4,"quizQuestionContent":53,"type":69,"pageMeta":70},[5,9,13,16,20,23,26,30,33,37,40,43,47,50],{"id":6,"value":7,"isTypeH1":8},"1919","JS: присваивание без var/let/const и область видимости",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4415","Теория: что происходит при `a=3`","theory-what-happens",{"id":14,"value":15,"isTypeParagraph":8},"10166","В JavaScript важно различать:\n- объявление переменной (`var`, `let`, `const`);\n- присваивание значения идентификатору (`a = 3`).\n\nЕсли выполняется присваивание `a = 3`, но идентификатор `a` ранее не был объявлен в текущей области видимости или во внешних областях, то это называется присваиванием необъявленному идентификатору (по смыслу — “переменной, которой нет”). Дальше поведение зависит от режима кода:\n- нестрогий режим (sloppy mode): движок обычно создаёт свойство глобального объекта, из‑за чего появляется глобальная переменная;\n- строгий режим (strict mode): такое присваивание запрещено и приводит к ошибке выполнения `ReferenceError`.",{"id":17,"description":18,"titleAlert":19,"isTypeAlertWarning":8},"718","Строгий режим включается директивой `\"use strict\";` внутри файла или функции. В JavaScript-модулях строгий режим действует автоматически, даже без этой директивы.",null,{"id":21,"value":22,"isTypeParagraph":8},"10167","Упрощённая схема решения для подобных задач:\n\n```\nПрисваивание `a = 3`\n|\nv\nПроверка: объявлена ли `a` через `var/let/const` (или как параметр функции)?\n|\n+-- Да -> изменяется существующая переменная `a` в найденной области видимости\n|\n+-- Нет -> проверка режима:\n         - sloppy -> появляется глобальная привязка (через глобальный объект)\n         - strict -> `ReferenceError` (ошибка выполнения)\n```",{"id":24,"description":25,"titleAlert":19,"isTypeAlertWarning":8},"719","В исходной записи `b=«hello»;` используются кавычки-ёлочки `« »`, которые не являются строковыми кавычками JavaScript. Для строк подходят `'...'`, `\"...\"` или `` `...` ``.\n",{"id":27,"value":28,"anchor":29,"isTypeH2":8},"4416","Разбор утверждений (что верно)","analysis-of-the-statements-what-is-correct",{"id":31,"value":32,"isTypeParagraph":8},"10168","Ниже оцениваются утверждения именно для кода вида `a=3; b=\"hello\";`, то есть без `var/let/const`.\n\n| Утверждение | Оценка | Почему |\n|---|---|---|\n| Создание переменной без ключевого слова `var` — синтаксическая ошибка | Неверно | Это не “ошибка синтаксиса” (код обычно разбирается), а ошибка выполнения в строгом режиме (`ReferenceError`) или создание глобальной переменной в нестрогом режиме. |\n| Создаются в локальном контексте | Неверно | Локальные переменные возникают при объявлении (`let/const` в блоке, `var` в функции и т.п.). Присваивание необъявленному идентификатору не создаёт “локальную” переменную. |\n| Создаются в глобальном контексте | Зависит от режима | В нестрогом режиме обычно появляется глобальная переменная (как свойство глобального объекта). В строгом режиме ничего не создаётся — выполнение прерывается `ReferenceError`. |\n\nВывод для тестового формата:\n- “синтаксическая ошибка” — неверно;\n- “локальный контекст” — неверно;\n- “глобальный контекст” — верно только при уточнении “в нестрогом режиме”.",{"id":34,"value":35,"anchor":36,"isTypeH2":8},"4417","Примеры: sloppy, strict, module","examples-sloppy-strict-module",{"id":38,"value":39,"isTypeParagraph":8},"10169","Пример 1 — нестрогий режим (sloppy): появляется глобальная переменная\n\n```\n(function () {\n  a = 3;\n  b = \"hello\";\n})();\n\nconsole.log(globalThis.a); // 3\nconsole.log(globalThis.b); // \"hello\"\n```\n\nСмысл: хотя присваивание находится внутри функции, при отсутствии объявления идентификаторы “утекают” в глобальную область (как свойства глобального объекта), что делает поведение неочевидным.\n\nПример 2 — строгий режим (strict): возникает `ReferenceError`\n\n```\n(function () {\n  \"use strict\";\n  a = 3;        // ReferenceError\n  b = \"hello\";  // выполнение до этой строки обычно не дойдёт\n})();\n```\n\nСмысл: строгий режим специально запрещает “случайное” создание глобальных переменных, чтобы ошибки находились раньше и код был безопаснее.\n\nПример 3 — модуль (ESM): строгий режим включён автоматически\n\n```\n// file: app.mjs (или \u003Cscript type=\"module\"> в браузере)\na = 3;        // ReferenceError\nb = \"hello\";  // ReferenceError\n```\n\nСмысл: в модуле нельзя рассчитывать на поведение sloppy-режима; требуется явное объявление переменных.",{"id":41,"description":42,"titleAlert":19,"isTypeAlertWarning":8},"720","Если в одних местах проекта код выполняется как модуль, а в других как обычный скрипт, то один и тот же фрагмент `a=3` может “работать” в одном месте и падать с ошибкой в другом. Это частая причина трудной отладки.",{"id":44,"value":45,"anchor":46,"isTypeH2":8},"4418","Как правильно объявлять `a` и `b` + подсказка","how-to-declare-a-and-b-correctly-and-hint",{"id":48,"value":49,"isTypeParagraph":8},"10170","Корректные варианты с явным объявлением:\n\n```\nconst a = 3;\nconst b = \"hello\";\n\nlet a = 3;\nlet b = \"hello\";\na = 4;\nb = \"hi\";\n```\n\nЕсли действительно требуется именно глобальная переменная, то более явно и читаемо задавать её через глобальный объект:\n\n```\nglobalThis.a = 3;\nglobalThis.b = \"hello\";\n```\n",{"id":51,"value":52,"isTypeParagraph":8},"10171","Кратко: `a=3; b=\"hello\";` без `var/let/const` не даёт синтаксическую ошибку, не создаёт локальные переменные, а в нестрогом режиме обычно создаёт глобальные (через `globalThis`), тогда как в строгом режиме и в модулях приводит к `ReferenceError`, поэтому утверждение про “глобальный контекст” верно только при указании нестрогого режима.",{"id":54,"options":55,"hint":66,"solution":67,"description":68},"1153",[56,60,63],{"id":57,"label":58,"isCorrect":59},"4757","создание переменной без ключевого слова `var` — синтаксическая ошибка",false,{"id":61,"label":62,"isCorrect":59},"4758","создаются в локальном контексте",{"id":64,"label":65,"isCorrect":8},"4759","создаются в глобальном контексте","При анализе кода вида `a=3;` сначала определяется, объявлялась ли переменная (`var/let/const`) и включён ли строгий режим (`\"use strict\"`). Затем делается вывод: либо создаётся свойство глобального объекта (нестрогий режим), либо возникает `ReferenceError` (строгий режим).","**Правильный ответ: 3** - создаются в глобальном контексте","Есть блок кода, в котором объявляются переменные и объявлены следующим образом:\n\n```\na=3; b=«hello»;\n```\n\nУкажите правильное утверждение:","quizQuestion",{"title":71,"description":72,"ogTitle":7,"ogDescription":72,"ogImageUrl":73,"canonical":19,"ogLocale":74,"ogSiteName":75,"ogImageType":76,"ogImageWidth":77,"ogImageHeight":78,"ogType":79,"ogUrl":19},"Укажите правильные утверждения работы кода","Разбор a=3; b=\"hello\": что происходит без объявления, strict mode, глобальный/локальный контекст, примеры и типичные ошибки","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":81,"siteUrl":82},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":84},[85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406],{"name":86,"value":87},"Теоретические задания","theoretical-tasks",{"name":89,"value":90},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":92,"value":93},"С чего начать?","where-to-begin",{"name":95,"value":96},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":98,"value":99},"Backend","backend",{"name":101,"value":102},"Frontend","frontend",{"name":104,"value":105},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":107,"value":108},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":110,"value":111}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":113,"value":114},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":116,"value":117},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":119,"value":120},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":122,"value":123},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":125,"value":126},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":128,"value":129},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":131,"value":132},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":134,"value":135},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":137,"value":138},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":140,"value":141},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":143,"value":144},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":146,"value":147},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":149,"value":150},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":152,"value":153},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":155,"value":156},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":158,"value":159},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":161,"value":162},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":164,"value":165},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":167,"value":168},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":170,"value":171},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":173,"value":174},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":176,"value":177},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":179,"value":180},"«Расплющивание» массива","flattening-the-array",{"name":182,"value":183},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":185,"value":186},"Сжатие строк","string-compression",{"name":188,"value":189},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":191,"value":192},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":194,"value":195},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":197,"value":198},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":200,"value":201},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":203,"value":204},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":206,"value":207},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":209,"value":210},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":212,"value":213},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":215,"value":216},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":218,"value":219},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":221,"value":222},"Что такое HTML?","what-is-html",{"name":224,"value":225},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":227,"value":228},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":230,"value":231},"Что такое cookie?","what-is-a-cookie",{"name":233,"value":234},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":236,"value":237},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":239,"value":240},"Лайвкодинг","livecoding",{"name":242,"value":243},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":245,"value":246},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":248,"value":249},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":251,"value":252},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":254,"value":255},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":257,"value":258},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":260,"value":261},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":263,"value":264},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":266,"value":267},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":269,"value":270},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":272,"value":273},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":275,"value":276},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":278,"value":279},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":281,"value":282},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":284,"value":285},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":287,"value":288},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":290,"value":291},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":293,"value":294},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":296,"value":297},"Сборник задач","tasks",{"name":299,"value":300},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":302,"value":303},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":305,"value":306},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":308,"value":309},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":311,"value":312},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":314,"value":315},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":317,"value":318},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":320,"value":321},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":323,"value":324},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":326,"value":327},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":329,"value":330},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":332,"value":333},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":335,"value":336},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":338,"value":339},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":341,"value":342},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":344,"value":345},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":347,"value":348},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":350,"value":351},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":353,"value":354},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":356,"value":357},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":359,"value":360},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":362,"value":363},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":365,"value":366},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":368,"value":369},"Что такое алгоритмическая сложность?","what-is-algorithmic-complexity",{"name":371,"value":372},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":374,"value":375},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":377,"value":378},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":380,"value":381},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":383,"value":384},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":386,"value":387},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":389,"value":390},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":392,"value":393},"Подготовка к тех.интервью","technical-interview",{"name":395,"value":396},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":398,"value":399},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":401,"value":402},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":404,"value":405},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":407,"value":408},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[410],{"label":392,"slug":393,"to":411},"/technical-interview/where-to-begin",{"navigationList":413,"navigationSublist":419},[414,416],{"path":411,"isActive":59,"name":92,"icon":415,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":417,"isActive":8,"name":296,"icon":418,"isNavbarMobileDisabled":59},"/technical-interview/tasks","material-symbols:task-outline",[420,427,446,455,460,555,572,579,584,627,642,647],{"title":421,"list":422,"isOpened":59},"Bash",[423,425],{"name":362,"path":424,"isActive":59},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":365,"path":426,"isActive":59},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":428,"list":429,"isOpened":59},"CSS",[430,432,434,436,438,440,442,444],{"name":272,"path":431,"isActive":59},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":275,"path":433,"isActive":59},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":278,"path":435,"isActive":59},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":281,"path":437,"isActive":59},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":284,"path":439,"isActive":59},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":287,"path":441,"isActive":59},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":290,"path":443,"isActive":59},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":293,"path":445,"isActive":59},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":447,"list":448,"isOpened":59},"Git",[449,451,453],{"name":350,"path":450,"isActive":59},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":353,"path":452,"isActive":59},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":356,"path":454,"isActive":59},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":456,"list":457,"isOpened":59},"HTML",[458],{"name":221,"path":459,"isActive":59},"/technical-interview/tasks/what-is-html",{"title":461,"list":462,"isOpened":59},"JavaScript",[463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553],{"name":104,"path":464,"isActive":59},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":95,"path":466,"isActive":59},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":242,"path":468,"isActive":59},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":125,"path":470,"isActive":59},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":128,"path":472,"isActive":59},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":164,"path":474,"isActive":59},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":167,"path":476,"isActive":59},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":182,"path":478,"isActive":59},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":401,"path":480,"isActive":59},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":188,"path":482,"isActive":59},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":170,"path":484,"isActive":59},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":173,"path":486,"isActive":59},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":89,"path":488,"isActive":59},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":191,"path":490,"isActive":59},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":299,"path":492,"isActive":59},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":302,"path":494,"isActive":59},"/technical-interview/tasks/what-is-this-in-javascript",{"name":305,"path":496,"isActive":59},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":308,"path":498,"isActive":59},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":311,"path":500,"isActive":59},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":314,"path":502,"isActive":59},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":317,"path":504,"isActive":59},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":320,"path":506,"isActive":59},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":323,"path":508,"isActive":59},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":326,"path":510,"isActive":59},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":329,"path":512,"isActive":59},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":374,"path":514,"isActive":59},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":380,"path":516,"isActive":59},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":113,"path":518,"isActive":59},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":131,"path":520,"isActive":59},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":116,"path":522,"isActive":59},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":146,"path":524,"isActive":59},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":122,"path":526,"isActive":59},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":149,"path":528,"isActive":59},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":140,"path":530,"isActive":59},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":152,"path":532,"isActive":59},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":158,"path":534,"isActive":59},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":110,"path":536,"isActive":59},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":161,"path":538,"isActive":59},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":134,"path":540,"isActive":59},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":107,"path":542,"isActive":59},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":137,"path":544,"isActive":59},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":179,"path":546,"isActive":59},"/technical-interview/tasks/flattening-the-array",{"name":143,"path":548,"isActive":59},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":185,"path":550,"isActive":59},"/technical-interview/tasks/string-compression",{"name":176,"path":552,"isActive":59},"/technical-interview/tasks/unifying-values-in-an-array",{"name":155,"path":554,"isActive":59},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":556,"list":557,"isOpened":59},"React",[558,560,562,564,566,568,570],{"name":332,"path":559,"isActive":59},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":404,"path":561,"isActive":59},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":335,"path":563,"isActive":59},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":338,"path":565,"isActive":59},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":341,"path":567,"isActive":59},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":344,"path":569,"isActive":59},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":407,"path":571,"isActive":59},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":573,"list":574,"isOpened":59},"Алгоритмы",[575,577],{"name":368,"path":576,"isActive":59},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":371,"path":578,"isActive":59},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":580,"list":581,"isOpened":59},"Дебаггинг",[582],{"name":347,"path":583,"isActive":59},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":585,"list":586,"isOpened":59},"Компьютерные сети",[587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625],{"name":194,"path":588,"isActive":59},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":398,"path":590,"isActive":59},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":197,"path":592,"isActive":59},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":200,"path":594,"isActive":59},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":203,"path":596,"isActive":59},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":206,"path":598,"isActive":59},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":209,"path":600,"isActive":59},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":212,"path":602,"isActive":59},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":215,"path":604,"isActive":59},"/technical-interview/tasks/what-are-http-parameters",{"name":218,"path":606,"isActive":59},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":224,"path":608,"isActive":59},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":227,"path":610,"isActive":59},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":230,"path":612,"isActive":59},"/technical-interview/tasks/what-is-a-cookie",{"name":233,"path":614,"isActive":59},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":236,"path":616,"isActive":59},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":395,"path":618,"isActive":59},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":245,"path":620,"isActive":59},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":248,"path":622,"isActive":59},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":251,"path":624,"isActive":59},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":377,"path":626,"isActive":59},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":628,"list":629,"isOpened":59},"Отрисовка в браузере",[630,632,634,636,638,640],{"name":257,"path":631,"isActive":59},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":254,"path":633,"isActive":59},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":260,"path":635,"isActive":59},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":263,"path":637,"isActive":59},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":266,"path":639,"isActive":59},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":269,"path":641,"isActive":59},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":643,"list":644,"isOpened":59},"Ревью кода",[645],{"name":359,"path":646,"isActive":59},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":648,"list":649,"isOpened":59},"Теория вероятности",[650,652,654],{"name":383,"path":651,"isActive":59},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":386,"path":653,"isActive":59},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":389,"path":655,"isActive":59},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":657,"copyright":660,"reportError":661,"socialNetwork":663},{"link":658,"title":659},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":662,"link":658},"Сообщить об ошибке",{"label":664,"socialNetworkList":665},"Мы в соцсетях:",[666,669,672],{"icon":19,"link":667,"title":668},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":670,"link":658,"title":671},"ic:baseline-telegram","Telegram",{"icon":673,"link":674,"title":675},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":677,"body":678},{},{"type":679,"children":680},"root",[681,689,702],{"type":682,"tag":683,"props":684,"children":685},"element","p",{},[686],{"type":687,"value":688},"text","Есть блок кода, в котором объявляются переменные и объявлены следующим образом:",{"type":682,"tag":690,"props":691,"children":695},"pre",{"className":692,"code":694,"language":687},[693],"language-text","a=3; b=«hello»;\n",[696],{"type":682,"tag":697,"props":698,"children":700},"code",{"__ignoreMap":699},"",[701],{"type":687,"value":694},{"type":682,"tag":683,"props":703,"children":704},{},[705],{"type":687,"value":706},"Укажите правильное утверждение:",{"data":708,"body":709},{},{"type":679,"children":710},[711],{"type":682,"tag":683,"props":712,"children":713},{},[714,716,722],{"type":687,"value":715},"создание переменной без ключевого слова ",{"type":682,"tag":697,"props":717,"children":719},{"className":718},[],[720],{"type":687,"value":721},"var",{"type":687,"value":723}," — синтаксическая ошибка",{"data":725,"body":726},{},{"type":679,"children":727},[728],{"type":682,"tag":683,"props":729,"children":730},{},[731],{"type":687,"value":62},{"data":733,"body":734},{},{"type":679,"children":735},[736],{"type":682,"tag":683,"props":737,"children":738},{},[739],{"type":687,"value":65},{"data":741,"body":742},{},{"type":679,"children":743},[744],{"type":682,"tag":683,"props":745,"children":746},{},[747,749,755,757,763,765,771,773,779],{"type":687,"value":748},"При анализе кода вида ",{"type":682,"tag":697,"props":750,"children":752},{"className":751},[],[753],{"type":687,"value":754},"a=3;",{"type":687,"value":756}," сначала определяется, объявлялась ли переменная (",{"type":682,"tag":697,"props":758,"children":760},{"className":759},[],[761],{"type":687,"value":762},"var/let/const",{"type":687,"value":764},") и включён ли строгий режим (",{"type":682,"tag":697,"props":766,"children":768},{"className":767},[],[769],{"type":687,"value":770},"\"use strict\"",{"type":687,"value":772},"). Затем делается вывод: либо создаётся свойство глобального объекта (нестрогий режим), либо возникает ",{"type":682,"tag":697,"props":774,"children":776},{"className":775},[],[777],{"type":687,"value":778},"ReferenceError",{"type":687,"value":780}," (строгий режим).",{"data":782,"body":783},{},{"type":679,"children":784},[785],{"type":682,"tag":683,"props":786,"children":787},{},[788,794],{"type":682,"tag":789,"props":790,"children":791},"strong",{},[792],{"type":687,"value":793},"Правильный ответ: 3",{"type":687,"value":795}," - создаются в глобальном контексте",{"data":797,"body":798},{},{"type":679,"children":799},[800,805,850,870],{"type":682,"tag":683,"props":801,"children":802},{},[803],{"type":687,"value":804},"В JavaScript важно различать:",{"type":682,"tag":806,"props":807,"children":808},"ul",{},[809,837],{"type":682,"tag":810,"props":811,"children":812},"li",{},[813,815,820,822,828,829,835],{"type":687,"value":814},"объявление переменной (",{"type":682,"tag":697,"props":816,"children":818},{"className":817},[],[819],{"type":687,"value":721},{"type":687,"value":821},", ",{"type":682,"tag":697,"props":823,"children":825},{"className":824},[],[826],{"type":687,"value":827},"let",{"type":687,"value":821},{"type":682,"tag":697,"props":830,"children":832},{"className":831},[],[833],{"type":687,"value":834},"const",{"type":687,"value":836},");",{"type":682,"tag":810,"props":838,"children":839},{},[840,842,848],{"type":687,"value":841},"присваивание значения идентификатору (",{"type":682,"tag":697,"props":843,"children":845},{"className":844},[],[846],{"type":687,"value":847},"a = 3",{"type":687,"value":849},").",{"type":682,"tag":683,"props":851,"children":852},{},[853,855,860,862,868],{"type":687,"value":854},"Если выполняется присваивание ",{"type":682,"tag":697,"props":856,"children":858},{"className":857},[],[859],{"type":687,"value":847},{"type":687,"value":861},", но идентификатор ",{"type":682,"tag":697,"props":863,"children":865},{"className":864},[],[866],{"type":687,"value":867},"a",{"type":687,"value":869}," ранее не был объявлен в текущей области видимости или во внешних областях, то это называется присваиванием необъявленному идентификатору (по смыслу — “переменной, которой нет”). Дальше поведение зависит от режима кода:",{"type":682,"tag":806,"props":871,"children":872},{},[873,878],{"type":682,"tag":810,"props":874,"children":875},{},[876],{"type":687,"value":877},"нестрогий режим (sloppy mode): движок обычно создаёт свойство глобального объекта, из‑за чего появляется глобальная переменная;",{"type":682,"tag":810,"props":879,"children":880},{},[881,883,888],{"type":687,"value":882},"строгий режим (strict mode): такое присваивание запрещено и приводит к ошибке выполнения ",{"type":682,"tag":697,"props":884,"children":886},{"className":885},[],[887],{"type":687,"value":778},{"type":687,"value":889},".",{"data":891,"body":892},{},{"type":679,"children":893},[894],{"type":682,"tag":683,"props":895,"children":896},{},[897,899,905],{"type":687,"value":898},"Строгий режим включается директивой ",{"type":682,"tag":697,"props":900,"children":902},{"className":901},[],[903],{"type":687,"value":904},"\"use strict\";",{"type":687,"value":906}," внутри файла или функции. В JavaScript-модулях строгий режим действует автоматически, даже без этой директивы.",{"data":908,"body":909},{},{"type":679,"children":910},[911,916],{"type":682,"tag":683,"props":912,"children":913},{},[914],{"type":687,"value":915},"Упрощённая схема решения для подобных задач:",{"type":682,"tag":690,"props":917,"children":920},{"className":918,"code":919,"language":687},[693],"Присваивание `a = 3`\n|\nv\nПроверка: объявлена ли `a` через `var/let/const` (или как параметр функции)?\n|\n+-- Да -> изменяется существующая переменная `a` в найденной области видимости\n|\n+-- Нет -> проверка режима:\n         - sloppy -> появляется глобальная привязка (через глобальный объект)\n         - strict -> `ReferenceError` (ошибка выполнения)\n",[921],{"type":682,"tag":697,"props":922,"children":923},{"__ignoreMap":699},[924],{"type":687,"value":919},{"data":926,"body":927},{},{"type":679,"children":928},[929],{"type":682,"tag":683,"props":930,"children":931},{},[932,934,940,942,948,950,956,957,963,965,971],{"type":687,"value":933},"В исходной записи ",{"type":682,"tag":697,"props":935,"children":937},{"className":936},[],[938],{"type":687,"value":939},"b=«hello»;",{"type":687,"value":941}," используются кавычки-ёлочки ",{"type":682,"tag":697,"props":943,"children":945},{"className":944},[],[946],{"type":687,"value":947},"« »",{"type":687,"value":949},", которые не являются строковыми кавычками JavaScript. Для строк подходят ",{"type":682,"tag":697,"props":951,"children":953},{"className":952},[],[954],{"type":687,"value":955},"'...'",{"type":687,"value":821},{"type":682,"tag":697,"props":958,"children":960},{"className":959},[],[961],{"type":687,"value":962},"\"...\"",{"type":687,"value":964}," или ",{"type":682,"tag":697,"props":966,"children":968},{"className":967},[],[969],{"type":687,"value":970},"`...`",{"type":687,"value":889},{"data":973,"body":974},{},{"type":679,"children":975},[976,995,1115,1120],{"type":682,"tag":683,"props":977,"children":978},{},[979,981,987,989,994],{"type":687,"value":980},"Ниже оцениваются утверждения именно для кода вида ",{"type":682,"tag":697,"props":982,"children":984},{"className":983},[],[985],{"type":687,"value":986},"a=3; b=\"hello\";",{"type":687,"value":988},", то есть без ",{"type":682,"tag":697,"props":990,"children":992},{"className":991},[],[993],{"type":687,"value":762},{"type":687,"value":889},{"type":682,"tag":996,"props":997,"children":998},"table",{},[999,1023],{"type":682,"tag":1000,"props":1001,"children":1002},"thead",{},[1003],{"type":682,"tag":1004,"props":1005,"children":1006},"tr",{},[1007,1013,1018],{"type":682,"tag":1008,"props":1009,"children":1010},"th",{},[1011],{"type":687,"value":1012},"Утверждение",{"type":682,"tag":1008,"props":1014,"children":1015},{},[1016],{"type":687,"value":1017},"Оценка",{"type":682,"tag":1008,"props":1019,"children":1020},{},[1021],{"type":687,"value":1022},"Почему",{"type":682,"tag":1024,"props":1025,"children":1026},"tbody",{},[1027,1059,1091],{"type":682,"tag":1004,"props":1028,"children":1029},{},[1030,1042,1047],{"type":682,"tag":1031,"props":1032,"children":1033},"td",{},[1034,1036,1041],{"type":687,"value":1035},"Создание переменной без ключевого слова ",{"type":682,"tag":697,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":687,"value":721},{"type":687,"value":723},{"type":682,"tag":1031,"props":1043,"children":1044},{},[1045],{"type":687,"value":1046},"Неверно",{"type":682,"tag":1031,"props":1048,"children":1049},{},[1050,1052,1057],{"type":687,"value":1051},"Это не “ошибка синтаксиса” (код обычно разбирается), а ошибка выполнения в строгом режиме (",{"type":682,"tag":697,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":687,"value":778},{"type":687,"value":1058},") или создание глобальной переменной в нестрогом режиме.",{"type":682,"tag":1004,"props":1060,"children":1061},{},[1062,1067,1071],{"type":682,"tag":1031,"props":1063,"children":1064},{},[1065],{"type":687,"value":1066},"Создаются в локальном контексте",{"type":682,"tag":1031,"props":1068,"children":1069},{},[1070],{"type":687,"value":1046},{"type":682,"tag":1031,"props":1072,"children":1073},{},[1074,1076,1082,1084,1089],{"type":687,"value":1075},"Локальные переменные возникают при объявлении (",{"type":682,"tag":697,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":687,"value":1081},"let/const",{"type":687,"value":1083}," в блоке, ",{"type":682,"tag":697,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":687,"value":721},{"type":687,"value":1090}," в функции и т.п.). Присваивание необъявленному идентификатору не создаёт “локальную” переменную.",{"type":682,"tag":1004,"props":1092,"children":1093},{},[1094,1099,1104],{"type":682,"tag":1031,"props":1095,"children":1096},{},[1097],{"type":687,"value":1098},"Создаются в глобальном контексте",{"type":682,"tag":1031,"props":1100,"children":1101},{},[1102],{"type":687,"value":1103},"Зависит от режима",{"type":682,"tag":1031,"props":1105,"children":1106},{},[1107,1109,1114],{"type":687,"value":1108},"В нестрогом режиме обычно появляется глобальная переменная (как свойство глобального объекта). В строгом режиме ничего не создаётся — выполнение прерывается ",{"type":682,"tag":697,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":687,"value":778},{"type":687,"value":889},{"type":682,"tag":683,"props":1116,"children":1117},{},[1118],{"type":687,"value":1119},"Вывод для тестового формата:",{"type":682,"tag":806,"props":1121,"children":1122},{},[1123,1128,1133],{"type":682,"tag":810,"props":1124,"children":1125},{},[1126],{"type":687,"value":1127},"“синтаксическая ошибка” — неверно;",{"type":682,"tag":810,"props":1129,"children":1130},{},[1131],{"type":687,"value":1132},"“локальный контекст” — неверно;",{"type":682,"tag":810,"props":1134,"children":1135},{},[1136],{"type":687,"value":1137},"“глобальный контекст” — верно только при уточнении “в нестрогом режиме”.",{"data":1139,"body":1140},{},{"type":679,"children":1141},[1142,1147,1156,1161,1171,1180,1185,1190,1199],{"type":682,"tag":683,"props":1143,"children":1144},{},[1145],{"type":687,"value":1146},"Пример 1 — нестрогий режим (sloppy): появляется глобальная переменная",{"type":682,"tag":690,"props":1148,"children":1151},{"className":1149,"code":1150,"language":687},[693],"(function () {\n  a = 3;\n  b = \"hello\";\n})();\n\nconsole.log(globalThis.a); // 3\nconsole.log(globalThis.b); // \"hello\"\n",[1152],{"type":682,"tag":697,"props":1153,"children":1154},{"__ignoreMap":699},[1155],{"type":687,"value":1150},{"type":682,"tag":683,"props":1157,"children":1158},{},[1159],{"type":687,"value":1160},"Смысл: хотя присваивание находится внутри функции, при отсутствии объявления идентификаторы “утекают” в глобальную область (как свойства глобального объекта), что делает поведение неочевидным.",{"type":682,"tag":683,"props":1162,"children":1163},{},[1164,1166],{"type":687,"value":1165},"Пример 2 — строгий режим (strict): возникает ",{"type":682,"tag":697,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":687,"value":778},{"type":682,"tag":690,"props":1172,"children":1175},{"className":1173,"code":1174,"language":687},[693],"(function () {\n  \"use strict\";\n  a = 3;        // ReferenceError\n  b = \"hello\";  // выполнение до этой строки обычно не дойдёт\n})();\n",[1176],{"type":682,"tag":697,"props":1177,"children":1178},{"__ignoreMap":699},[1179],{"type":687,"value":1174},{"type":682,"tag":683,"props":1181,"children":1182},{},[1183],{"type":687,"value":1184},"Смысл: строгий режим специально запрещает “случайное” создание глобальных переменных, чтобы ошибки находились раньше и код был безопаснее.",{"type":682,"tag":683,"props":1186,"children":1187},{},[1188],{"type":687,"value":1189},"Пример 3 — модуль (ESM): строгий режим включён автоматически",{"type":682,"tag":690,"props":1191,"children":1194},{"className":1192,"code":1193,"language":687},[693],"// file: app.mjs (или \u003Cscript type=\"module\"> в браузере)\na = 3;        // ReferenceError\nb = \"hello\";  // ReferenceError\n",[1195],{"type":682,"tag":697,"props":1196,"children":1197},{"__ignoreMap":699},[1198],{"type":687,"value":1193},{"type":682,"tag":683,"props":1200,"children":1201},{},[1202],{"type":687,"value":1203},"Смысл: в модуле нельзя рассчитывать на поведение sloppy-режима; требуется явное объявление переменных.",{"data":1205,"body":1206},{},{"type":679,"children":1207},[1208],{"type":682,"tag":683,"props":1209,"children":1210},{},[1211,1213,1219],{"type":687,"value":1212},"Если в одних местах проекта код выполняется как модуль, а в других как обычный скрипт, то один и тот же фрагмент ",{"type":682,"tag":697,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":687,"value":1218},"a=3",{"type":687,"value":1220}," может “работать” в одном месте и падать с ошибкой в другом. Это частая причина трудной отладки.",{"data":1222,"body":1223},{},{"type":679,"children":1224},[1225,1230,1239,1244],{"type":682,"tag":683,"props":1226,"children":1227},{},[1228],{"type":687,"value":1229},"Корректные варианты с явным объявлением:",{"type":682,"tag":690,"props":1231,"children":1234},{"className":1232,"code":1233,"language":687},[693],"const a = 3;\nconst b = \"hello\";\n\nlet a = 3;\nlet b = \"hello\";\na = 4;\nb = \"hi\";\n",[1235],{"type":682,"tag":697,"props":1236,"children":1237},{"__ignoreMap":699},[1238],{"type":687,"value":1233},{"type":682,"tag":683,"props":1240,"children":1241},{},[1242],{"type":687,"value":1243},"Если действительно требуется именно глобальная переменная, то более явно и читаемо задавать её через глобальный объект:",{"type":682,"tag":690,"props":1245,"children":1248},{"className":1246,"code":1247,"language":687},[693],"globalThis.a = 3;\nglobalThis.b = \"hello\";\n",[1249],{"type":682,"tag":697,"props":1250,"children":1251},{"__ignoreMap":699},[1252],{"type":687,"value":1247},{"data":1254,"body":1255},{},{"type":679,"children":1256},[1257],{"type":682,"tag":683,"props":1258,"children":1259},{},[1260,1262,1267,1269,1274,1276,1282,1284,1289],{"type":687,"value":1261},"Кратко: ",{"type":682,"tag":697,"props":1263,"children":1265},{"className":1264},[],[1266],{"type":687,"value":986},{"type":687,"value":1268}," без ",{"type":682,"tag":697,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":687,"value":762},{"type":687,"value":1275}," не даёт синтаксическую ошибку, не создаёт локальные переменные, а в нестрогом режиме обычно создаёт глобальные (через ",{"type":682,"tag":697,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":687,"value":1281},"globalThis",{"type":687,"value":1283},"), тогда как в строгом режиме и в модулях приводит к ",{"type":682,"tag":697,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":687,"value":778},{"type":687,"value":1290},", поэтому утверждение про “глобальный контекст” верно только при указании нестрогого режима.",1775735655417]