JavaScript

Вопрос по JavaScript, обращение к функции, которая находится в функции...

Возможно ли как-то обратится к (под) функции?
то есть как-то обратится к функции, которая находится в функции...
Ни разу не видел чего-то подобного.
Пример на скрине:
В JavaScript функцию можно использовать в качестве значения переменной.
Если хочешь использовать внутреннюю функцию снаружи, то присвой ее переменной, объявленной снаружи.

var abcd = function() { alert("Лабуда"); };

function abc() {
alert("Привет!");
abcd = function() {
alert("Привет, мир!");
};
}

abcd();
abc();
abcd();

Такой код выдает три сообщения:
1) Лабуда
2) Привет
3) Привет, мир!

А если хочешь, чтобы функция abcd() была доступна изначально, то просто вынеси ее из abc() наружу.
Вячеслав Мазыкин
Вячеслав Мазыкин
55 198
Лучший ответ
const calc = function (a, sign, b) {
const sum = function () {
return a + b;
};
const difference = function () {
return a - b;
};
const multiply = function () {
return a * b;
};
const divide = function () {
return b? a / b : "Деление на ноль!";
};
switch (sign) {
case '+': return sum;
case '-': return difference;
case '*': return multiply;
case '/': return divide;
default: return "Неизвестная ошибка!";
}
};
let a = 5;
let b = 7;
let sum = calc(a, '+', b)();
let difference = calc(a, '-', b)();
let multiply = calc(a, '*', b)();
let divide = calc(a, '/', b)();
console.log(a+' + '+b+' = '+sum+'\n'+a+' - '+b+' = '+difference+'\n'+a+' * '+b+' = '+multiply+'\n'+a+' / '+b+' = '+divide)
Сергей Лупашко
Сергей Лупашко
92 522
Ержан Каскирбаев Очень кривой и неоптимизированный код.
Покажется странно, но функция - на самом деле объект!) Поэтому в его имени можно сохранить разные свойства, как у обычного объекта)

abc(); // Сработает alert('abc'), потом внутренний вызов xyz();

abc.child(); // Сработает внутренняя функция xyz

function abc(){
    alert('abc');
    xyz();        /* Функцию ниже создали отдельно, чтобы можно было здесь
                        свободно её использовать */

    abc.child = xyz;     /* Но еще присвоили её к свойству .child - теперь снаружи
                                      можно вызывать её через abc.child(); */

    function xyz(){
        alert('xyz');
    }
}
Ержан Каскирбаев Да, серьезно? Ну как проверь свой код.
var a = ( function() {
// ..
function b() {
alert( "Hello from B!" );
}

function c() {
alert( "Hello from C!" );
}

return {
b: b,
c: c
}
})();

a.b();
a.c();

https://jsfiddle.net/ar9wo7hd/
Функция созданная внутри другой функции, можно обращаться только внутри той функции где она была объявлена, снаружи она будет невидна для других, это понятие про область действия идентификаторов, это относится к именам функций, переменных.
Вот вариант решения:

function abc() {
alert("One start");

abcd = function() {
alert("Two start");
}
//start function #2 abcd()
abcd();

abcd = function() {
alert("Three start");
}
// start function #3 abcd()
abcd();

}

abc(); // start function #1