Как понять поток этой функции JavaScript - PullRequest
0 голосов
/ 20 июня 2020

Я новичок, изучаю JavaScript после HTML / CSS. Я нахожусь в самом начале книги Head First, пытаясь понять эту функцию.

Как эта функция работает на каждом этапе? Что происходит, начиная с thingamajig (5)? ​​

function clunk(times) {
    var num = times;
    while (num > 0) {
        display("clunck");
        num = num - 1;
    }
}

function thingamajig(size) {
    var facky = 1;
    clunkCounter = 0;
    if (size == 0) {
        display("clanck");
    } else if (size == 1) {
        display("thunk");
    } else {
        while (size > 1) {
            facky = facky * size;
            size = size - 1;
        }
        clunk(facky);
    }
}

function display(output) {
    console.log(output);
    clunkCounter = clunkCounter + 1;
}
var clunkCounter = 0;
thingamajig(5);
console.log(clunkCounter);

Ответы [ 3 ]

3 голосов
/ 20 июня 2020

Вот что произойдет, когда мы запустим это:

  • , начиная сверху, мы определяем три разные функции: clunk, thingamajig и display

  • , затем мы инициализируем переменную с именем clunkCounter и присваиваем ей номер 0

  • , затем мы вызываем функцию thingamajig, передавая аргумент 5 для параметра size

  • в thingamajig, мы войдем в ветвь else, и мы пройдем через while l oop 4 раза, поэтому мы фактически выполняем facky = 1 * 5 * 4 * 3 * 2, так что facky заканчивается значением 120

  • , затем мы вызываем clunk(120)

  • , поэтому мы будем называть display("clunk") 120 раз

  • display просто записываем "clunk", и в качестве побочного эффекта увеличиваем clunkCounter, чтобы записать, сколько раз мы это делали

  • затем, наконец, мы выходим из системы clunkCounter, что будет 120

Зачем нам это нужно? Я не знаю. Это очень надуманный пример, демонстрирующий, как использовать условные выражения if / else и увеличивающие переменные. Я бы не стал слишком беспокоиться о том, что все это «означает». Если вы еще этого не сделали, попробуйте запустить его в консоли браузера и посмотреть, что произойдет, если вы измените значение, которое вы передаете, на thingamajig.

Изменить: очень хорошо объяснено. Чтобы добавить немного, он вычисляет факториал числа и выводит его значение в конце.

0 голосов
/ 20 июня 2020
  • в функции thingamajig () передается значение 5.
  • и проверяется, совпадает ли оно с 0 или 1, затем переходит в блок else, здесь while l oop. Начальное значение переменной facky равно 1, но здесь ее значение снова присваивается, поэтому оно становится 5, а размер уменьшается, поэтому снова становится 4
  • , когда оно больше 1, снова 5 * 4 = 20, facky становится 20.
  • при продолжении, пока значение размера не станет 1. Если значение размера равно 1, facky станет 120.
  • (5) x (4) x (3) x (2) = 120
  • теперь вызывается функция clank и times = 120
  • здесь num = times, поэтому num = 120
  • пока num> 0, вызывается другая функция display, которая console.log (вывод ). И здесь output = "clunk".
  • И увеличьте значение clunkCounter на 1.
  • Он будет повторяться до num = 0 и сделать clunkCounter = 120
0 голосов
/ 20 июня 2020

начинается с thingamajig(5);

function thingamajig(size) {
var facky = 1;
clunkCounter = 0;
if (size == 0) {
    display("clanck");
} else if (size == 1) {
    display("thunk");
} else {
    while (size > 1) {
        facky = facky * size;
        size = size - 1;
    }
    clunk(facky);
}

}

он принимает «5» в качестве параметра, что означает, что переменная «size» равна 5, и начинает проверять условия в блоках if .

теперь давайте посмотрим. размер равен 5, поэтому он пропустит первые 2 части блока if

`if (size == 0) {
display("clanck");
} else if (size == 1) {
display("thunk");
}`

и выполнит часть else

else {
        while (size > 1) {
            facky = facky * size;
            size = size - 1;
        }
        clunk(facky);
    }

this, в то время как l oop будет работать до размера > 1, что означает, что размер должен быть равен 1, чтобы сломать l oop. в то время как l oop.

переменная "facky" изменяется, но в конце переменная "size" будет "1", а "facky" будет 96

когда закончится «while l oop», он вызовет clunk(facky);

, что означает

`function clunk(96) {
    var num = 96;
    while (96 > 0) {
        display("clunck");
        num = num - 1;
    }
}`

, эта функция вызовет функцию «display» 96 раз. и функция отображения будет отображать в консоли 96 раз слово "clunck".

в конце будет консольный журнал clucnkCounter.

Надеюсь, я правильно понял вопрос. потому что ответить на этот вопрос письменно сложно.

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