JavaScript函数可以自行返回吗?

时间:2011-08-05 16:21:10

标签: javascript function self

我可以编写一个返回iteself的函数吗?

我正在阅读有关闭包的一些说明 - see Example 6 - 函数返回一个函数,因此您可以将func()();称为有效的JavaScript。

所以我想知道一个函数可以以这样的方式返回自己,你可以无限期地将它链接到自己:

func(arg)(other_arg)()(blah);

使用arguments对象,被叫者还是来电者?

6 个答案:

答案 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严格模式不支持

arguments.callee

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