Цитата:
А вот "Результат 5 запишется снова в переменную "a", это да и это конечное значение. Ну это равноценно как написать в тетрадке в клеточку: x = 2 y = 3 x * (y + 18) Анализируем, получаем выражение: 2 * (3 + 18) далее по правилам арифметики вычисляем то, что в скобках, а приравниваете ли вы результат этого вычисления чему либо в уме или нет, это не имеет для выражения никакого значения. |
Цитата:
function nod(a, b) {
while (b !== 0) {
b = a % (a = b);
}
return a;
}
alert(nod(21, 14));
И вот на этом примере я "завис"!Теперь все понял!Спасибо. |
Цитата:
Дабы потом очередной бедняга не понимал откуда берется та пятерка? Это все нидзя стайл. |
Цитата:
|
Цитата:
В том случае просто сэкономили на одной переменной и видал какой резонанс. :) Мое мнение - не стоит так поступать. |
Цитата:
function nod(a, b) {
while (b !== 0) {
console.log('before '+a);
b = a % (a = b);
console.log('after '+a);
}
console.log('return '+a);
return a;
}
nod(21, 14);
PS. Кстати, кроме приоритета операторы обладают еще и ассоциативностью. |
Ваш пример понятен.В режиме call stack chrome все значения переменных на каждом этапе цикла показывает!Про приоритеты и ассоциативность понятно.Поправьте меня если я не прав!Вообщем сначала интерпретатор проводит построчный анализ кода!(слева на право)А потом в соответствии с приоритетами и ассоциативностью вычисляет выражение.Вроде так!
Например здесь он сначала вычисляет значение в скобках, а потом использует новое значение переменной "a" при операции делении: var b = 10, a = 5; a = (a = b) / a; alert(a); // 1 |
Цитата:
function nod(a, b) {
while (a != 0 && b != 0) {
if (a > b) {
a = a % b;
} else {
b = b % a;
}
}
return a + b;
}
alert(nod(30, 18));
Спасибо всем за ответы и советы!:) |
Цитата:
Выше же написано, что в функции новое значение переменной а будет использоваться на следующей итерации. При этом в самом выражении до вычисления вместо переменных будут взяты их текущие (!) значения. Еще выше было же: x * (y + 18), вспоминайте школу. В вашем же выражении новое значение а получаемой ею в скобках нигде не используется, это действие у вас просто бессмыслица. |
laimas,
тогда почему var b = 10, a = 5; a = (a = b) / a; alert(a); // 1 и var b = 10, a = 5; a = (a = b) / b; alert(a); // 1 a var b = 10, a = 5; a = a / b; alert(a); // 0.5 |
| Часовой пояс GMT +3, время: 11:57. |