是否可以执行两次匿名函数

Is it possible to execute anonymous function twice?

本文关键字:两次 函数 执行 是否      更新时间:2023-09-26

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

(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)

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

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

或者,如果你真的想让函数成为一个立即调用的函数表达式(iife),你也可以让函数返回自己。

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

我认为你可以做得很好:

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/