是否可以执行两次匿名函数
Is it possible to execute anonymous function twice?
我想定义一个自执行的匿名函数,但要用不同的参数运行它好几次。
(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/
相关文章:
- Meteor Router数据函数被调用两次
- Append元素在运行两次函数后不显示
- 为什么我们要在语句中两次将函数括在括号中
- 调用一个函数两次
- java-script 函数被调用两次
- Ajax Post-Submit函数提交两次
- 在一个页面中包含两次的脚本中调用函数
- 我必须点击两次才能使用jQuery激活函数
- 为什么这个函数执行了两次
- isHidden函数要求我在应用响应显示时单击两次
- 调用随机函数Javascript,但不能两次调用相同的函数
- jQuery停止函数运行两次
- JS函数只需点击一次即可触发两次
- 在一个页面中使用相同的javascript函数两次
- matchMedia调用函数两次
- JS函数中的一个点击按钮被调用了两次
- jQuery移除两次函数调用
- 在JS中定义两次函数.根据网页指示要使用的定义
- 防止在两个触发事件中执行两次函数
- AngularJS需要执行两次函数才能显示结果