2014-02-04 3 views
0

Я только учусь Javascript, и я не понимаю, почему ниже уравнение равно 23. Я бы сказал, что должно быть 24.Проблема понимания оператора инкремента постфикса в Javascript

В моем онлайн-класса, объяснение того, почему ответ 23 выглядит следующим образом:

«num1 добавляется к 3, а затем увеличивается на 1 (20 + 3)« Этот ответ для меня не имеет смысла.

var num1=20; 
num2=num1++ +3; 
alert (num2) 

Любая помощь будет оценена!

ответ

2
var num1=20; 
num2=num1++ +3; 

Это говорит о том: добавить 3 к значению num1 и присвоить результат num2. Затем приращение num1. После завершения операции num1 == 21 и num2 == 23.

Результат: 23, как вы уже нашли.

Это путаница, которая привела к тому, что операторы до и после исправления были обескуражены.

+0

Возможно, стоит отметить, что '++ num1 + 3' приведет к ожидаемому результату в вопросе. –

+0

ok, поэтому num2 = 23 и num1 = 21 then? – user2196989

+0

@ user2196989 Абсолютно. –

0

По существу, постфикс ++ (специфически ++ ПОСЛЕ переменной) подобен специальной функции. Он выполняет 2 действия

  1. Добавляет один к переменной
  2. Возвращает переменные исходное значение

Сравните это к оператору префиксом, ++ num1, который выполняет эти 2 действия:

  1. Добавляет один к переменной
  2. Возвращает новое значение

Если это поможет увидеть это в коде, вы можете думать об этом как

function PlusPlus(num) 
{ 
    var oldValue = num; 
    num = num + 1; 
    return oldValue; 
} 

Хотя это не будет фактически выполнять так, как вы хотите его из-за проход по значению, но это, кроме точки , Может быть сложно запомнить разницу между префиксным и постфиксным, но главное помнить - постфикс приходит ПОСЛЕ переменной и изменяет ее ПОСЛЕ того, что все остальное делается в строке, в то время как префикс приходит перед переменной и изменяет ее перед чем-либо другое сделано.

0

Постфиксная прирост, который в основном делает это:

var num2 = num1 + 3; 
num1 = num1 + 1; 

Эквивалент код будет таким:

var num1 = 20; 
var num2 = num1 + 3; // 20 + 3 = 23 
num1 = num1 + 1; // 20 + 1 = 21 
alert(num2); // alerts 23 

и оператор инкремента префикс (я знаю, что это не был задан, но может быть полезно) работает следующим образом:

/* Original code */ 
var num1 = 20; 
var num2 = ++num1 + 3; 
alert(num2); 

/* Broken down code */ 
var num1 = 20; 
num1 = num1 + 1; // 20 + 1 = 21 
var num2 = num1 + 3; // 21 + 3 = 24 
alert(num2) // alerts 24 

Идите вперед и спросите, есть ли у вас еще вопросы. Я с радостью отвечу на них.

Смежные вопросы