我可以编写一个返回iteself的函数吗?
我正在阅读有关闭包的一些说明 - see Example 6 - 函数返回一个函数,因此您可以将func()();
称为有效的JavaScript。
所以我想知道一个函数可以以这样的方式返回自己,你可以无限期地将它链接到自己:
func(arg)(other_arg)()(blah);
使用arguments
对象,被叫者还是来电者?
答案 0 :(得分:30)
有2-3种方法。正如你所说,一个是使用arguments.callee
。如果你正在处理一个匿名函数,而这个函数没有存储在某个地方(你知道)的变量,那么这可能是唯一的方法:
(function() {
return arguments.callee;
})()()()().... ;
第二是使用功能名称
function namedFunc() {
return namedFunc;
}
namedFunc()()()().... ;
最后一个是使用分配给变量的匿名函数,但你必须知道变量,所以在这种情况下我没有理由,为什么你不能只给函数一个名字,并使用上面的方法
var storedFunc = function() {
return storedFunc;
};
storedFunc()()()().... ;
它们在功能上完全相同,但callee
是最简单的。
编辑:我同意SLaks;我不能推荐它
答案 1 :(得分:10)
是。
只需return arguments.callee;
然而,这可能会导致代码混乱;我不推荐它。
答案 2 :(得分:5)
你可以按照以下方式做你想做的事:
date.toMutableDateTime.toDateTime
JavaScript严格模式不支持
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
答案 3 :(得分:0)
有一种简单的方法可以实现以下目的:
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
答案 4 :(得分:0)
也可以只返回自调整函数的参数,如
console.log( (function(a) { return a; })(1) ); // returns 1
答案 5 :(得分:0)
甚至上述所有分选器都是
f=()=>f