Я бы Poly заполнил функциональность classList и использовал новый синтаксис. Таким образом, новый браузер будет использовать новую реализацию (которая намного быстрее), и только старые браузеры будут получать производительность от кода.
https://github.com/remy/polyfills/ BLOB / Master / classList.js
Когда вы используете оператор ++
или --
после переменной, значение переменной не увеличивается или уменьшается до тех пор, пока выражение не будет оценено и исходное значение не будет возвращено. Например, x++
преобразуется в нечто похожее на следующее:
document.write(x);
x += 1;
Когда вы используете оператор ++
или --
до переменной, значение переменной увеличивается или уменьшается до того, как выражение будет оценено, и новое значение будет возвращено. Например, ++x
преобразуется в нечто похожее на следующее:
x += 1;
document.write(x);
Операторы postincrement и preincrement доступны в C, C ++, C #, Java, javascript, php, и я уверен, что есть другие языки. Согласно , почему-не-ruby-support-i-or-i-increment-декремент-операторы , Ruby не имеет этих операторов.
Я думаю об 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
Если вы посмотрите на спецификацию javascript на страницах 70 и 71, вы увидите, как это должно быть реализовано:
Префикс:
blockquote> blockquote>
- Пусть expr является результатом вычисления UnaryExpression.
- Выдайте исключение SyntaxError, если все условия истинны: 72 © Ecma International 2011 Тип (expr) - это ссылка IsStrictReference ( expr) true Тип (GetBase (expr)) - это запись среды. GetReferencedName (expr) является либо «eval», либо «arguments»
- . Пусть oldValue будет ToNumber (GetValue (expr)).
- Пусть newValue является результатом добавления значения от 1 до oldValue, используя те же правила, что и для оператора + (см. 11.6.3).
- Вызов PutValue (expr, newValue).
- Возврат newValue.
Или проще:
- Инкрементное значение
- Возвращаемое значение
Postfix:
blockquote> < / blockquote>
- Пусть lhs является результатом оценки LeftHandSideExpres sion.
- Выбросить исключение SyntaxError, если все условия истинны: Type (lhs) is Reference is true IsStrictReference (lhs) is true Тип (GetBase (lhs)) - это запись среды GetReferencedName (lhs) либо «eval» или «arguments»
- Пусть oldValue будет ToNumber (GetValue (lhs)).
- Пусть newValue является результатом добавления значения 1 в oldValue, используя те же правила как и для оператора + (см. 11.6.3).
- Вызов PutValue (lhs, newValue).
- Возвращает oldValue.
Или проще:
- Назначить значение темп
- Инкрементное значение
- Температура возврата