Скажем, у меня есть вложенная функция с именем «страны», и я хочу вызвать две функции: одна с именем «Россия» с параметром «города1» и другая с именем «Китай» с параметром с именем «города» внутри функций стран. Как мне вызвать две функции с параметрами внутри вложенной функции?
function countries() {
function Russia(cities1) {
var totalpop1 = cities1 * (10 ** 6);
//each city has a population of 10^6 people
return totalpop1;
}
function China(cities2) {
var totalpop2 = cities2 * (10 ** 6);
//each city has a population of 10^6 people
return totalpop2;
}
var result = totalpop1 + totalpop2;
return result;
}
Если вы вызываете его изнутри countries, то просто Russia(809). Если за пределами countries, то вы не можете получить доступ к вложенным функциям из-за области видимости



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы можете использовать объект (например, класс).
А как насчет кода ниже?
var countries = {
getRussia: function(cities1) {
var totalpop1 = cities1 * (10 ** 6);
//each city has a population of 10^6 people
return totalpop1;
},
getChina: function(cities2) {
var totalpop2 = cities2 * (10 ** 6);
//each city has a population of 10^6 people
return totalpop2;
},
getTotal: function(pop1, pop2) {
var result = this.getRussia(pop1) + this.getChina(pop2);
return result;
}
}
var div = document.querySelector("#result");
div.innerHTML = countries.getTotal(1, 4);<div id = "result"></div>Но если вы действительно хотите вызывать вложенные функции, вы можете использовать замыкания:
function countries() {
return function(cities1) {
var totalpop1 = cities1 * (10 ** 6);
return function(cities2) {
var totalpop2 = cities2 * (10 ** 6);
return totalpop1 + totalpop2;
}
}
}
var div = document.querySelector('#result');
div.innerHTML = countries()(1)(4);
Какова цель использования ключевого слова this?
ключевое слово this связывает объект countries в ECMA 5. Если функция находилась вне объекта, ключевое слово this связывало бы саму функцию.
Ну, сначала вам нужно вызов внутренние функции, но вы не показываете, как вы их вызываете в приведенном выше коде.