function one(foo) { return 1 + foo || 1 }
function minus(bar) { return - bar}
console.log(one(minus(one())));
Чтобы понять результат конечного выражения, нужно выполнить его по шагам и посмотреть результат на каждом шаге.
Выражение one(minus(one()))
можно представить в следующем виде:
var a = one();
var b = minus(a);
var c = one(b);
Посмотрим результат на каждом шаге:
var a = one()
. так как параметр one
- undefined
- (1 + undefined) || 1
-> NaN || 1
-> 1
var b = minus(1)
. Результат -1
var c = one(-1)
-> (1 + (-1)) || 1
-> 0 || 1
-> 1Почему так происходит?
Все это из-за того, что приоритет операции ||
меньше чем приоритет сложения.
ожидалось, что результат будет 0
Для этого необходимо поправить функцию one
.
Вместо foo||1
нужно писать foo||0
. Чтобы в случае отсутствия аргумента функция возвращала 1
, а не 2
как сейчас:
function one(foo) {
return 1 + (foo || 0)
}
function minus(bar) {
return -bar
}
console.log(one(minus(one())));
Возьмите foo || 1
в скобки
function one(foo) {
return 1 + (foo || 1);
}
function minus(bar) {
return 0 - bar;
}
console.log(one(minus(one())));
У вас выполняется второе выражение, потому что внутренняя функция one()
ничего не принимает. foo
ничему не равен и, соответственно выполняется второе выражение. Просто надо подумать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть код, который вставляется на рекламной площадке и размещается на других сайтах в определенных iframe блокахСтоит задача из iframe на этих рекламных...