Выполняется ли содержащая функция перед своими аргументами?

1

Я смущен о порядке оценки в JavaScript. В моем первом примере я ожидал, что параметр number++ будет оцениваться до функции console.log(), делая вывод консоли 2,3,4.

Печать 1, 2, 3 на консоли:

    var foo = [1,2,3]
       for (number of foo) {
         console.log(number++)
       }

Печать 2, 3, 4 на консоль:

    var foo = [1,2,3]
       for (number of foo) {
         number++
         console.log(number)
       }

Из моего понимания этого ответа аргументы будут оцениваться сначала слева направо перед выполнением содержательной функции. Это, похоже, не так - может кто-нибудь объяснить, почему нет?

  • 1
    variable++ добавляется после того, как она была объявлена / использована, ++variable ранее. Ни то, ни другое не будет вызовом функции
  • 1
    Не забудьте объявить все переменные, например number , или они окажутся в глобальной области видимости. Или проверьте строгий режим, в который он будет выдавать, если вы попытаетесь получить доступ / назначить необъявленную переменную.
Теги:

3 ответа

2

Проблема здесь связана с оператором ++. Это говорит о значении числа, передает его функции и затем добавляет ее к числу.

Если вы измените его на ++number, вы получите ожидаемое поведение. Это говорит добавить один к значению числа, а затем передать это функции.

1

Это основы pre-increment и post increment. Помните, что у нас есть ++number и number++. ++number немедленно увеличивает номер (в этой точке), а number++ увеличивает число при следующем number++ числа.

  • 0
    Спасибо! Так просто теперь это объяснили. Я родом из Ruby и только начинаю изучать JavaScript. В Ruby нет операторов приращения, поэтому, вероятно, я этого не заметил.
  • 1
    number++ возвращает старое значение, ++number возвращает новое значение. Они оба по-прежнему увеличивают число в этой точке, а не (каким-то волшебным образом) в следующий раз, когда их встречают.
0

console.log(number++) запускает console.log(number) потому что он не может запускать ++ после того, как правильным параметром будет console.log(++number)

var foo = [1,2,3];

for (number of foo) console.log(number++);

console.log("---");
for (number of foo) console.log(number);

console.log("---");
// This is the same as your second block of code
for (number of foo) console.log(++number);
    
console.log("---");
// You can see that does not change the foo values
for (number of foo) console.log(number);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню