我想知道 JavaScript 是否支持在另一个函数或嵌套函数中编写函数(我在博客中读到)。这真的可能吗?事实上,我已经使用过这些,但不确定这个概念。我对此真的不清楚 - 请帮忙!
这真的可能吗?
是的。
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));
下面的内容很恶心,但可以演示如何像对待任何其他类型的对象一样对待函数。
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();
函数是第一类对象,可以是:
以肯尼给出的示例为基础:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
会用 5 提醒您。
是的,可以编写和调用嵌套在另一个函数中的函数。
试试这个:
function A(){
B(); //call should be B();
function B(){
}
}
您不仅可以返回作为变量传递给另一个函数的函数,还可以在内部使用它进行计算,但在外部定义它。看这个例子:
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
使用 ES6 替代其他答案的解决方案:
const currying = (x) => (y) => x + y;
console.log(currying(5)(3));
将打印到控制台:8
function calculate(num1) {
// arrow function
return (num2) => num1 + num2;
}
// Invoke the function
console.log(calculate(4)(6));
这真的可能吗?
很有可能。您可以使用 javascript 中的函数执行任何操作,因为它是一流的函数编程语言。
function add(x, y) {
// we can define another function inside the add function to print our answer
function print(ans) {
console.log(ans)
}
const ans = x + y
print(ans)
return ans
}
add(1, 2)
是的,JavaScript 确实支持在其他函数中编写函数,这称为嵌套函数。这个概念允许您在另一个函数的作用域内定义一个函数。这是一个例子:
在此示例中,
innerFunction
被定义在outerFunction
的范围内。因此,innerFunction
只能在outerFunction
内部访问。当outerFunction
被呼叫时,也可以呼叫innerFunction
,但无法从外部呼叫innerFunction
outerFunction
。
嵌套函数对于在特定上下文或范围内封装功能非常有用,并且它们通常在 JavaScript 中用于各种目的,例如定义辅助函数或实现闭包。
function outerFunction() {
// Outer function scope
console.log("This is outerFunction.");
function innerFunction() {
// Inner function scope
console.log("This is innerFunction.");
}
// Call the inner function
innerFunction();
}
// Call the outer function
outerFunction();