繁体   English   中英

JavaScript函数可以自行返回吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM