适当的功能调用礼仪?

时间:2016-10-07 13:59:09

标签: javascript

我可能写错了这个标题,但在javascript中可以调用嵌套函数,如果不是为什么以及什么是更安全或更正确的方法

home.jsp

2 个答案:

答案 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 {}

在这里,您可以在声明事件侦听器时传递您的配置,但是直到事件被触发后才能调用它,并且由于关闭,您将可以访问事件侦听器回调中的颜色变量。但是现在我知道这个技术我用了很多次