我可能写错了这个标题,但在javascript中可以调用嵌套函数,如果不是为什么以及什么是更安全或更正确的方法
home.jsp
答案 0 :(得分:1)
是的,如果您希望poo
能够访问foo
内的私人信息并且您不希望调用代码有权访问该信息,那就没问题了。或者即使foo
知道如何创建poo
函数,即使不需要私人信息也是如此。
在一个表达式中完成所有这些操作是相对罕见的,因为通常当您从另一个函数返回一个函数时,您希望保留该函数:
var p = foo();
var fp1 = p();
var fp2 = p();
...但只有相对不寻常,并非罕见。
以下是使用函数原始调用的上下文所保存的私人信息的示例(allocator
,此处与您的foo
类似):
function allocator(seed) {
return function() {
return seed++;
};
}
var a = allocator(1);
console.log(a()); // 1
console.log(a()); // 2
console.log(a()); // 3
请注意,调用a
的代码无法直接操作seed
。它只能调用a
并使用它返回的值。
答案 1 :(得分:0)
是的,它是一种称为function foo(param1) {
return function poo(param2) {
console.log(param1, param2);
}
}
var fooPoo = foo('param1')('param2');
的功能性技术。它允许您在代码中的不同位置设置函数的参数
function setColor(color) {
return function (e) {
e.target.background = color
}
}
someElement.addEventLister('click', setColor('red'))
我常常做的是在运行事件监听器时使用currying传递设置以允许更多地重用函数
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee implements Serializable {}
在这里,您可以在声明事件侦听器时传递您的配置,但是直到事件被触发后才能调用它,并且由于关闭,您将可以访问事件侦听器回调中的颜色变量。但是现在我知道这个技术我用了很多次