Передача i-- выражения в качестве параметра в JavaScript - PullRequest
0 голосов
/ 05 июня 2018

Следующий код добавляет новый div каждые 1 секунду в теле.Я не понимаю, почему вызов newDiv (i--) работает, а newDiv (i-1) - нет.Я бы принял ответ, который дает мне четкое объяснение.

Я знаю, что i-- равен i = i-1.

«Не работает» означает, что поведение newDiv (i-1) добавляет новый элемент div, содержащий постоянное число, например 9,9,9,9,9, ... к телу.

Правильное поведение будет уменьшаться: т.е. 9,8,7,..., 0.Что сделано newDiv (i -)

function newDiv(n) {
    var bodyObj = document.getElementsByTagName('body')[0];

    var div = document.createElement('div');
    div.innerHTML = n;
    bodyObj.appendChild(div);

    if(n===0) {
    var h1 = document.createElement('h1');
    h1.innerHTML = 'Hallo World';
    bodyObj.appendChild(h1);
    }
}

var i=0;
while(i<10) {
    window.setTimeout(function() {
    newDiv(i--); // i-1 does not work, placing i-- before does not work either.
    }, i*1000);
    i++;
}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

i-- работает, потому что фактически изменяет переменную, в то время как i - 1 просто "отображает" результат выражения, но не изменяет i.Я рекомендую прочитать эту главу YDKJS, если вы действительно хотите понять свой фрагмент: https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch5.md#statements--expressions

0 голосов
/ 05 июня 2018

При использовании i-1 вы фактически не устанавливаете i переменную.

i-- равно i=i-1

...