Почему n + = 1 не эквивалентен n ++ [duplicate]

Я бы Poly заполнил функциональность classList и использовал новый синтаксис. Таким образом, новый браузер будет использовать новую реализацию (которая намного быстрее), и только старые браузеры будут получать производительность от кода.

https://github.com/remy/polyfills/ BLOB / Master / classList.js

4
задан Blender 27 June 2012 в 02:48
поделиться

3 ответа

PostIncrement (переменная ++) & amp; PostDecrement (variable -)

Когда вы используете оператор ++ или -- после переменной, значение переменной не увеличивается или уменьшается до тех пор, пока выражение не будет оценено и исходное значение не будет возвращено. Например, x++ преобразуется в нечто похожее на следующее:

document.write(x);
x += 1;

PreIncrement (++ variable) & amp; PreDecrement (- variable)

Когда вы используете оператор ++ или -- до переменной, значение переменной увеличивается или уменьшается до того, как выражение будет оценено, и новое значение будет возвращено. Например, ++x преобразуется в нечто похожее на следующее:

x += 1;
document.write(x);

Операторы postincrement и preincrement доступны в C, C ++, C #, Java, javascript, php, и я уверен, что есть другие языки. Согласно , почему-не-ruby-support-i-or-i-increment-декремент-операторы , Ruby не имеет этих операторов.

11
ответ дан Community 25 August 2018 в 20:23
поделиться

Я думаю об x++ и ++x (неофициально) как это:

x++:

function post_increment(x) {
  return x; // Pretend this return statement doesn't exit the function
  x = x + 1;
}

++x:

function pre_increment(x) {
  x = x + 1;
  return x;
}

Две операции выполняют одно и то же, но они возвращают разные значения:

var x = 1;
var y = 1;

x++; // This returned 1
++y; // This returned 2

console.log(x == y); // true because both were incremented in the end
7
ответ дан Blender 25 August 2018 в 20:23
поделиться

Если вы посмотрите на спецификацию javascript на страницах 70 и 71, вы увидите, как это должно быть реализовано:

Префикс:

  1. Пусть expr является результатом вычисления UnaryExpression.
  2. Выдайте исключение SyntaxError, если все условия истинны: 72 © Ecma International 2011 Тип (expr) - это ссылка IsStrictReference ( expr) true Тип (GetBase (expr)) - это запись среды. GetReferencedName (expr) является либо «eval», либо «arguments»
  3. . Пусть oldValue будет ToNumber (GetValue (expr)).
  4. Пусть newValue является результатом добавления значения от 1 до oldValue, используя те же правила, что и для оператора + (см. 11.6.3).
  5. Вызов PutValue (expr, newValue).
  6. Возврат newValue.

Или проще:

  1. Инкрементное значение
  2. Возвращаемое значение

Postfix:

  1. Пусть lhs является результатом оценки LeftHandSideExpres sion.
  2. Выбросить исключение SyntaxError, если все условия истинны: Type (lhs) is Reference is true IsStrictReference (lhs) is true Тип (GetBase (lhs)) - это запись среды GetReferencedName (lhs) либо «eval» или «arguments»
  3. Пусть oldValue будет ToNumber (GetValue (lhs)).
  4. Пусть newValue является результатом добавления значения 1 в oldValue, используя те же правила как и для оператора + (см. 11.6.3).
  5. Вызов PutValue (lhs, newValue).
  6. Возвращает oldValue.
< / blockquote>

Или проще:

  1. Назначить значение темп
  2. Инкрементное значение
  3. Температура возврата
4
ответ дан Dan Busha 25 August 2018 в 20:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: