Порядок оценки можно показать, добавив сообщение.
hn("A")
оценивается, печатает «A: 1» и возвращает функцию (назовем ее F1), которая увеличивает значение x на 10 и отображает его значение.
hn(F1)
. Он увеличивает x и печатает: "function hn (msg2) {
x + = 10;
console.log (msg2 +": "+ x);}: 2" => здесь сообщение - это функция F1 (немного странно, хорошо). Обратите внимание, что F1 не вызывается, используется только его строковое представление. Он возвращает функцию (назовем ее F2), которая увеличивает x на 10 и отображает его значение.
hn("B")
оценивается, печатает «B: 3» и возвращает функцию (назовем ее F3), которая увеличивает x на 10 и отображает его значение.
F2(F3)
оценивается, увеличивает x на 10 и печатает «function hn (msg2) {
x + = 10;
console.log (msg2 +» : "+ x);}: 13" => здесь сообщение является функцией F3 (немного странно, хорошо) Обратите внимание, что F3 не вызывается, используется только его строковое представление. Он возвращает функцию (назовем ее F4), которая увеличивает x на 10 и отображает его значение.
Обратите внимание, что некоторые функции создаются, но никогда не вызывают (F1, F3, F5).
var x = 0;
function hn(msg) {
x++;
console.log(msg + ": "+ x);
return (function hn(msg2) {
x += 10;
console.log(msg2 + ": "+ x);
})
}
hn(hn("A"))(hn("B"));