JavaScript. Подробное руководство, 6-е издание, стр. 10

<b>  &lt;/tr&gt;</b>

<b>  &lt;tr&gt;</b>

<b>    &lt;th&gt;Sponsors:c/th&gt;</b>

<b>    &lt;td colspan=2&gt;</b>

<b>      Apply for your loan with one of these fine lenders:</b>

<b>      &lt;div id=&quot;lenders&quot;&gt;&lt;/div&gt;</b>

<b>    &lt;/td&gt;</b>

<b>  &lt;/tr&gt;</b>

<b>&lt;/table&gt;</b>

<b>&lt;!-- Остальная часть примера - JavaScript-код в теге &lt;script&gt; ниже. Обычно сценарии --&gt; </b>

<b>&lt;!-- помещаются в начало документа, в заголовок &lt;head&gt;, но в данном случае вам проще --&gt; </b>

<b>&lt;!-- будет понять пример, если JavaScript-код будет находиться ниже HTML-содержимого. --&gt; </b>

<b>&lt;script&gt;</b>

<b>&quot;use strict&quot;; // Использовать строгий режим ECMAScript 5, если броузер поддерживает его</b>

<b>/*</b>

<b>* Этот сценарий определяет функцию calculate(), вызываемую обработчиками событий</b>

<b>* в разметке HTML выше. Функция читает значения из элементов &lt;input&gt;, вычисляет размеры</b>

<b>* платежей по ссуде, отображает результаты в элементах &lt;span&gt;. Кроме того, она сохраняет</b>

<b>* пользовательские данные, отображает ссылки на кредитные учреждения и рисует диаграмму. </b>

<b>*/</b>

<b>function calculate() {</b>

<b>  // Отыскать элементы ввода и вывода в документе</b>

<b>  var amount = document.getElementById(&quot;amount&quot;);</b>

<b>  var apr = document.getElementByld(&quot;apr”);</b>

<b>  var years = document.getElementById(&quot;years&quot;);</b>

<b>  var zipcode = document.getElementById(&quot;zipcode&quot;);</b>

<b>  var payment = document.getElementById(&quot;payment&quot;);</b>

<b>  var total = document.getElementById(&quot;total&quot;);</b>

<b>  var totalinterest = document.getElementById(&quot;totalinterest&quot;);</b>

<b>  // Получить ввод пользователя из элементов ввода. Предполагается, что все данные </b>

<b>  // являются корректными. Преобразовать процентную ставку из процентов </b>

<b>  // в десятичное число и преобразовать годовую ставку в месячную ставку.</b>

<b>  // Преобразовать период платежей в годах в количество месячных платежей.</b>

<b>  var principal = parseFloat(amount.value);</b>

<b>  var interest = parseFloat(apr.value) / 100 / 12;</b>

<b>  var payments = parseFloat(years.value) * 12;</b>

<b>  // Теперь вычислить сумму ежемесячного платежа.</b>

<b>  var х = Math.pow(1 + interest, payments); // Math.pow() вычисляет степень </b>

<b>  var monthly = (principal * x * interest)/(x-1);</b>

<b>  // Если результатом является конечное число, следовательно, пользователь </b>

<b>  // указал корректные данные и результаты можно отобразить </b>

<b>  if (isFinite(monthly)) {</b>

<b>    // Заполнить поля вывода, округлив результаты до 2 десятичных знаков</b>

<b>    payment.innerHTML = monthly.toFixed(2);</b>

<b>    total.innerHTML = (monthly * payments).toFixed(2);</b>

<b>    totalinterest.innerHTML = ((monthly*payments)-principal).toFixed(2);</b>

<b>    // Сохранить ввод пользователя, чтобы можно было восстановить данные </b>

<b>    // при следующем открытии страницы</b>

<b>    save(amount.value, apr.value, years.value, zipcode.value);</b>

<b>    // Реклама: отыскать и отобразить ссылки на сайты местных </b>

<b>    // кредитных учреждений, но игнорировать сетевые ошибки </b>

<b>    try { // Перехватывать все ошибки, возникающие в этих фигурных скобках </b>

<b>      getLenders(amount.value, apr.value, years.value, zipcode.value);</b>

<b>    }</b>

<b>    catch(e) { /* И игнорировать эти ошибки */ }</b>

<b>    // В заключение вывести график изменения остатка по кредиту, а также </b>

<b>    // графики сумм, выплачиваемых в погашение кредита и по процентам </b>

<b>    chart(principal, interest, monthly, payments);</b>

<b>  }</b>

<b>  else {</b>

<b>    // Результат не является числом или имеет бесконечное значение,</b>

<b>    // что означает, что были получены неполные или некорректные данные.</b>

<b>    // Очистить все результаты, выведенные ранее, </b>