3

我想定义一个自执行匿名函数,但让它使用不同的参数运行多次。

(function(x){ console.log(x*x)})(2)
// output: 4

// I know this syntax is wrong, I am
// demonstrating how I would imagine it being implemented
(function(x){ console.log(x*x)})(2)(5)
// output is error, desired output: 4{Newline}25

是否可以?


编辑:根据@Charmander 的回答,这似乎是可能的,而且几乎可以肯定是个坏主意,但这正如我所料......

(function(x){ console.log(x*x); return arguments.callee})(2)(5)
4

2 回答 2

6

您可以将匿名函数存储在变量中。

var someFunction = function(x){
   console.log(x*x);
};

someFunction(5);
someFunction(6);

或者,如果您真的想让它成为立即调用的函数表达式 (iife),您可以让函数返回自身。

(function(x){
   console.log(x*x);
   return arguments.callee;
})(5)(6);
于 2012-07-10T23:42:31.243 回答
1

我会说你可以做得很好:

var f = function(x) {
    console.log(x**x);
    return f;
};

f(5)(6)(7);

有关工作示例,请参见此处:

http://jsfiddle.net/9qAgr/

现在,我承认,上面并不是真正的匿名函数,因为我已经给它起了一个名字(f);因此,如果您的字面意思是:“是否可以在没有任何方式回溯函数本身的情况下执行此操作?” 然后我怀疑它。虽然我可能只是缺乏想象力;)


实际上,您可以通过定义一个在保持状态的同时返回自身的函数来获得更多乐趣(如果您是像我这样的书呆子,因为您在这个网站上,您可能就是这样),这要归功于 JavaScript 的能力向函数添加属性:

function createCalculator(operation) {
    var result = 0;

    var calculator = function(x) {
        result = operation(x, result);
        return calculator;
    };

    calculator.result = function() {
        return result;
    };

    return calculator;
};

var add = createCalculator(function(x, y) { return x + y; });

console.log(add(1)(2)(3)(4).result());

如果您想亲眼看看,这里有一个演示:

http://jsfiddle.net/9qAgr/1/

于 2012-07-10T23:36:28.437 回答