Я написал простой код закрытия Javascript, но он не запускается.Куда я иду не так? - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в Javascript и после нескольких практик кодирования теперь начал закрывать.Я написал простой код, в котором при нажатии на ссылку, которая отображает размеры, размер шрифта тела документа должен соответственно увеличиваться.Но я не понимаю, где я иду не так.

    <!DOCTYPE html>
    <html>
       <head>
          <style>
             body {
             font-family: 'Times New Roman', Times, serif;
             font-size: 10px;
             background-color: bisque;
             color:black;
             }
          </style>
</head>
       <body>
          <p>HELLO!! I AM CHANGING MY SIZES.</p>
          <a href="#" id="size-12" onclick="changeSize(12)">Size 12</a>
          <a href="#" id="size-14" onclick="changeSize(14)">Size 14</a>
          <a href="#" id="size-16" onclick="changeSize(16)">Size 16</a>
          <script>
             function changeSize(size) {
                   return function () {
                       document.body.style.fontSize = size + 'px';
                   }
               };
          </script>
       </body>
<html>

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Одной из причин использования функции, сгенерированной из замыкания, является создание функции, которая «замораживает» более общую функцию с некоторым конкретным набором параметров.Хотя это правда, что вы могли бы «исправить» вашу проблему, изменив атрибуты обработчика с дополнительным () в конце, на самом деле нет смысла использовать функцию создателя функции, если это то, что вы собираетесь в конечном итоге делать.

Вместо этого вы можете сделать набор предварительно созданных функций для использования из вашего HTML:

      <script>
         function changeSize(size) {
               return function () {
                   document.body.style.fontSize = size + 'px';
               }
           };

         var size12 = changeSize(12);
         var size14 = changeSize(14);
         var size16 = changeSize(16);
      </script>

Теперь ваш HTML может использовать эти подготовленные функции:

      <a href="#" id="size-12" onclick="size12()">Size 12</a>
      <a href="#" id="size-14" onclick="size14()">Size 14</a>
      <a href="#" id="size-16" onclick="size16()">Size 16</a>
0 голосов
/ 17 декабря 2018

Итак, на данный момент вы возвращаете функцию, которую вы не вызываете, чтобы вызвать функцию, измените каждый из кликов следующим образом:

onclick="changeSize(12)()"

Это делает так, что changeSize (12) возвращает внутреннюю функцию, а затем, используя вторые скобки, вызывает внутреннюю функцию:)

РЕДАКТИРОВАТЬ: Как уже говорили другие, здесь не нужно возвращать внутреннюю функциюи если бы вместо этого содержимое функции changeSize () было что-то вроде

function changeSize(size) {
    document.body.style.fontSize = size + 'px';
}

, это было бы гораздо более кратким

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...