Я сейчас учусь на экзамен по JavaScript.Я также немного знаю C и Perl, так что я знаком с префиксной и постфиксной нотацией на всех трех языках.
Я провел для него онлайн-экзамен, и я допустил одну ошибку в оценкеследующий код:
var x = 10;
x += x--;
Теперь я думал, что это будет оценка 19, потому что это будет 10 + 10, а затем вычесть 1, чтобы сделать 9. Но я получил ответ, что это было неправильно, и он действительно оцениваетдо 20. Я подумал, что это звучит немного подозрительно, поэтому я проверил это в HTML-документе, и снова получилось 20.Затем я попробовал эквиваленты в C и Perl, и оба оценили их в 19.
Может кто-нибудь объяснить мне, почему JavaScript оценивает ответ как 20, когда другие языки оценивают его как 19?Ответ, который я получил от теста, был не слишком понятен для меня:
Операторы приращения ++ и декремента - можно размещать до или после операнда.Если оператор увеличения или уменьшения помещается перед операндом, операция происходит немедленно.Если после операнда ставится оператор увеличения или уменьшения, изменение значения операнда не проявляется до следующего обращения к операнду в программе.Таким образом, выражение x + = x-- эквивалентно x = x + 10, что соответствует 20.