[英]Can a JavaScript function return itself?
我可以编写一个返回iteself的函数吗?
我正在阅读关于闭包的一些描述 - 参见例6 - 函数返回一个函数,所以你可以调用func()();
作为有效的JavaScript。
所以我想知道一个函数可以以这样的方式返回自己,你可以无限期地将它链接到它自己:
func(arg)(other_arg)()(blah);
使用arguments
对象,被调用者还是调用者?
有2-3种方式。 正如你所说,一个是使用arguments.callee
。 如果你正在处理一个匿名函数,而这个函数没有存储在某个地方(你知道)变量,那么这可能是唯一的方法:
(function() {
return arguments.callee;
})()()()().... ;
第二是使用函数的名称
function namedFunc() {
return namedFunc;
}
namedFunc()()()().... ;
最后一个是使用分配给变量的匿名函数,但你必须知道变量,所以在这种情况下我没有理由,为什么你不能只给函数一个名字,并使用上面的方法
var storedFunc = function() {
return storedFunc;
};
storedFunc()()()().... ;
它们在功能上都是相同的,但callee
是最简单的。
编辑:我同意SLaks; 我也不能推荐它
是。
只需return arguments.callee;
但是,这可能会导致代码混乱; 我不推荐它。
你可以按照以下方式做你想做的事:
// Do definition and execution at the same time.
var someFunction = (function someFunction() {
// do stuff
return someFunction
})();
console.log(someFunction)
JavaScript严格模式不支持arguments.callee 。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
有一种简单的方法可以实现以下功能:
let intArr = [];
function mul(x){
if(!x){
return intArr.reduce((prev, curr) => prev * curr)
}
intArr.push(x);
return mul;
}
console.log(mul(2)(4)(2)()); => outputs 16
也可以只返回自调用函数的参数
console.log( (function(a) { return a; })(1) ); // returns 1
即使是以上所有的分拣机:
f=()=>f
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.