Загрузка данных


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Практическая №24 - Исправление ошибки</title>
</head>
<body>
    <h1>Исправление ошибки в коде (Вариант B)</h1>
    
    <script type="text/javascript">
        // ==============================================
        // ИСХОДНЫЙ КОД С ПРОБЛЕМОЙ
        // ==============================================
        console.log("=== ИСХОДНЫЙ КОД ===");
        
        function showOriginal(n) {
            if (n < 10) {
                var result = "Mano";
            }
            console.log(result); // Проблема: обращение к переменной, которая может быть не определена
        }
        
        console.log("Вызов show(5):");
        showOriginal(5); // Выведет "Mano"
        
        console.log("\nВызов show(20):");
        showOriginal(20); // Выведет "undefined"
        
        // ==============================================
        // ОБЪЯСНЕНИЕ ПРОБЛЕМЫ
        // ==============================================
        console.log("\n\n=== ОБЪЯСНЕНИЕ ПРОБЛЕМЫ ===");
        console.log("Проблема: переменная 'result' объявлена с помощью 'var' внутри блока if.");
        console.log("Особенности 'var':");
        console.log("1. Поднимается (hoisting) в начало функции");
        console.log("2. Имеет функциональную область видимости");
        console.log("3. До присваивания имеет значение 'undefined'");
        console.log("\nКогда вызывается show(20):");
        console.log("- Условие (n < 10) ложно (20 < 10 = false)");
        console.log("- Блок if не выполняется");
        console.log("- Переменная 'result' существует (благодаря hoisting), но равна 'undefined'");
        console.log("- console.log(result) выводит 'undefined'");
        
        // ==============================================
        // СПОСОБ 1: Инициализация переменной перед условием
        // ==============================================
        console.log("\n\n=== СПОСОБ 1: Инициализация переменной ===");
        console.log("Исправление: объявить и инициализировать переменную ДО условия");
        
        function showFixed1(n) {
            var result = ""; // Инициализируем пустой строкой
            if (n < 10) {
                result = "Mano";
            }
            console.log("При n = " + n + ": result = '" + result + "'");
        }
        
        showFixed1(5);
        showFixed1(20);
        
        // ==============================================
        // СПОСОБ 2: Использование let с правильной областью видимости
        // ==============================================
        console.log("\n\n=== СПОСОБ 2: Использование let ===");
        console.log("Исправление: использовать 'let' с проверкой существования");
        
        function showFixed2(n) {
            if (n < 10) {
                let result = "Mano"; // result существует только внутри блока
                console.log("При n = " + n + ": result = '" + result + "'");
            } else {
                console.log("При n = " + n + ": условие не выполнилось, result не определен");
            }
        }
        
        showFixed2(5);
        showFixed2(20);
        
        // ==============================================
        // СПОСОБ 3: Возврат значения из функции
        // ==============================================
        console.log("\n\n=== СПОСОБ 3: Возврат значения из функции ===");
        console.log("Исправление: использовать return для возврата значения");
        
        function showFixed3(n) {
            if (n < 10) {
                return "Mano";
            }
            return "Число больше или равно 10";
        }
        
        console.log("При n = 5: " + showFixed3(5));
        console.log("При n = 20: " + showFixed3(20));
        
        // ==============================================
        // СПОСОБ 4: Использование значения по умолчанию
        // ==============================================
        console.log("\n\n=== СПОСОБ 4: Значение по умолчанию ===");
        console.log("Исправление: использовать значение по умолчанию при выводе");
        
        function showFixed4(n) {
            var result;
            if (n < 10) {
                result = "Mano";
            }
            // Используем значение по умолчанию, если result undefined
            console.log("При n = " + n + ": " + (result || "Значение не установлено"));
        }
        
        showFixed4(5);
        showFixed4(20);
        
        // ==============================================
        // ИТОГОВОЕ ИСПРАВЛЕНИЕ (рекомендуемое)
        // ==============================================
        console.log("\n\n=== ИТОГОВОЕ ИСПРАВЛЕНИЕ ===");
        console.log("Самый простой и читаемый способ:");
        
        function show(n) {
            let result; // Объявляем переменную в начале функции
            if (n < 10) {
                result = "Mano";
            } else {
                result = "Число больше или равно 10";