Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.09.2015, 22:36
Новичок на форуме
Отправить личное сообщение для ejik3800 Посмотреть профиль Найти все сообщения от ejik3800
 
Регистрация: 02.09.2015
Сообщений: 3

Пример из книги: замыкания
При открытии данного скрипта в браузере запрашивает число. Но при нажатии ок выдает: 4 => 4. Что автор хотел показать этим примером и как заставить его правильно работать ? Помогите в общем

// * В качестве имени аргумента функция использует малораспрастроненный
// идентификатор $, чем снижается вероятность конфликта имен в инспектируемой
// области видимости. *

// * Создать точку останова можно, передав это замыкание в функцию, как
// показано в примере 8.7. *
// // эта функция является точки останова. Она предлагает пользователю ввести
// // выражение, вычисляет его с использованием замыкания и выводит результат.
// // Используемое замыкание предоставляет доступ к проверяемой области видимости.
// // Таким образом любая функа будет создавать свое собственное замыкание.

// // Реализовано по образу и подобию функции breakpoint() Стива Йена
// // http://trimpath.com/project/wiki/TrimBreakpoint
function inspect(inspector, title) {
    var expression, result;

    // существует возмодность отключать точки останова за счет создания
    // свойства 'ignore' у этой функции
    if('ignore' in arguments.callee) return;
    while(true) {
        // определить как вывести запрос перед пользователем
        var message = "";
        // если задан аргумент title, вывести его первым
        if(title) message = title + '\n';
        // если выражение уже вычислено, привести его вместе с его значением
        if(expression) message += '\n' + expression + "==> " + result + '\n';
        else expression = '';
        // типовое приглашение к вводу всегда должно выводиться:
        message += 'Введите выражение, которое следует вычислить:';

        // получить ввод пользователя, перевести приглашение и использовать
        // последнее выражение как значение по умолчанию
        expression = prompt(message, expression);

        // если пользователь ничего не ввел(или щелкнул на кнопочке отменить),
        // работу в точке останова можно считать оконченной и вернуть
        // управление
        if(!expression) return;

        // В противном случае вычислить выражение с использованием замыкания в
        // инспектируемом контексте исполнения. Результаты будут введены на
        // следующей итерации
        result = inspector(expression);
    }
}


// * Обратите внимание: для вывода информации и ввода строки пользователя
// функция inspect() из примера 8.7. задействует метод Window.prompt(). *

// * Рассмотрим пример функции, вычисляющей факториал числа и использующей
// механизм точек останова *
function factorial(n) {
    // создать замыкание для этой функции
    var inspector = function($) { return eval($); }
    inspect(inspector, 'вход в функцию factorial()');

    var result = 1;
    while(n > 1) {
        result = result * n;
        n--;
        inspect(inspector, 'factorial() loop');
    }

    inspect(inspector, 'выход из функции factorial() loop');
    return result;
}

factorial();
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2018, 10:46
Новичок на форуме
Отправить личное сообщение для lite Посмотреть профиль Найти все сообщения от lite
 
Регистрация: 01.04.2018
Сообщений: 1

Все очень просто, функции inspect в теле функции factorial это точки останова в дилоговоые окна которых можно вводить значения переменных, например n или result, до тех пор пока не будет нажата кнопка отмены и точка останова завершит свою работу и передаст управление следующей инструкции.

Благодаря этим точкам можно узнать какие значения переменных на данном промежутке выполнения программы установлены.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замыкания и утечки памяти newobject Общие вопросы Javascript 1 18.07.2014 12:39
Не отрабатывает пример из книги - помогите разобраться, почему. Ленча jQuery 2 13.07.2014 22:11
Три книги по JavaScript... Почемучкин Учебные материалы 12 30.11.2011 22:52
Про замыкания Иваннн Общие вопросы Javascript 3 12.01.2011 11:12
Пример из книги Ajax на практике Sadd AJAX и COMET 5 10.04.2010 18:20