2015-05-24 5 views

ответ

3

Оператор инкремента после исправления возвращает текущее значение для оценки и увеличивает его затем, поэтому изменение значения заметен, когда он упоминается во второй раз.

Итак, когда выполняется оператор return, значение не имеет , но был увеличен. Вы можете перекрестную проверку, выполнив следующие действия:

console.log(counter++); // 0 
console.log(counter); // 1 
return counter; // obviously 1 

Попробуйте оператору предварительно исправить который приросты и затем возвращают инкрементируются значения для оценки.

return ++counter; // 1 
1

Это называется prefix (++x) vs postfix (x++) и единственное различие действительно порядок операций:

counter; 

вычисляет значение. (0)

counter++; 

вычисляет значение (0), выполняет вычисление (0 -> 1) и изменяет переменную (counter -> 1).

++counter; 

выполняет вычисление (0 + 1), изменяет переменную (counter -> 1) и вычисляется в (1) значение.

0

var counter = 0;

var increment = function(){ 
// now counter is 0 and after return it increment it's value to 1 
// return 0 then 0+1=1; 
    return counter++; 
// calculate like math, counter = 0+1 then counter = 1, now return 1; 
    // return counter=counter+1; 
} 

console.log(increment()); 

В первом сценарии

return counter++; 

Это утверждение постфикса и оценивает как

return 0; and then 0+1=1 

Во втором сценарии

return counter=counter+1; 

Вычислить как математика,

return counter = 0+1 then, 
return counter = 1, 
return 1;