Мне интересно, поддерживает ли JavaScript запись функции в другой функции или вложенные функции (я читал ее в блоге). Это действительно возможно? Фактически, я использовал их, но не уверен в этой концепции. Я действительно не понимаю, пожалуйста, помогите!
Можете ли вы написать вложенные функции в JavaScript?
Ответ 1
Это действительно возможно.
Да.
function a(x) { // <-- function
function b(y) { // <-- inner function
return x + y; // <-- use variables from outer scope
}
return b; // <-- you can even return a function.
}
console.log(a(3)(4));
Ответ 2
Следующие действия противны, но служат для демонстрации того, как вы можете рассматривать такие функции, как любой другой объект.
var foo = function () { alert('default function'); }
function pickAFunction(a_or_b) {
var funcs = {
a: function () {
alert('a');
},
b: function () {
alert('b');
}
};
foo = funcs[a_or_b];
}
foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();
Ответ 3
Функции - это объекты первого класса, которые могут быть:
- Определено в вашей функции
- Создан так же, как любая другая переменная или объект в любой точке вашей функции.
- Возврат из вашей функции (что может показаться очевидным после двух выше, но все же)
Чтобы основываться на примере, данном Кенни:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
Будет предупреждать вас с 5.
Ответ 4
Да, можно написать и вызвать функцию, вложенную в другую функцию.
Попробуйте следующее:
function A(){
B(); //call should be B();
function B(){
}
}
Ответ 5
Вы можете не только вернуть функцию, которую вы передали в другую функцию как переменную, вы можете также использовать ее для вычисления внутри, но определяя ее вне. См. Этот пример:
function calculate(a,b,fn) {
var c = a * 3 + b + fn(a,b);
return c;
}
function sum(a,b) {
return a+b;
}
function product(a,b) {
return a*b;
}
document.write(calculate (10,20,sum)); //80
document.write(calculate (10,20,product)); //250