我想定义一个自动执行匿名函数,但让它使用不同的参数运行几次。
(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)
答案 0 :(得分: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);
答案 1 :(得分:1)
我会说你可以做得很好:
var f = function(x) {
console.log(x**x);
return f;
};
f(5)(6)(7);
请参阅此处查看工作示例:
现在,我将授予您,上面不是真正的匿名函数,因为我有点给它一个名字(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());
如果你想亲眼看看,这是一个演示: