1

我正在尝试将一个函数链接到自身,以便我可以这样(无限地)调用它:

infiny()('a')('b')('c')('d');

到目前为止我有这段代码,但它只捕获了之后的第一个函数调用infiny()

function infiny() {
    return function( output ) {
        alert(output);
        return this;
    }
}

我希望它在这里为所有四个参数输出四个警报:a, b, c and d

这可能吗?- 我当前的示例显示没有溢出、语法错误、失败,除了它没有在('a').

4

3 回答 3

3

您可以返回一个命名函数表达式,该表达式返回对自身的引用:

function infiny() {
    return function ret( output ) {
        alert(output);
        return ret;
    }
}
infiny()('a')('b')('c')('d');

演示


this在您的示例中引用该window对象。那是因为简单地调用 ()没有方法语法的函数不会设置this引用,在这种情况下,在非严格模式下,this引用是设置为window对象。

thisArg解析在# 11.2.3null/ undefined->window翻译在#10.4.3进行了描述。规范的措辞不是很友好,所以这里有一篇文章解释了this进入函数执行上下文时可能设置引用的所有可能方式:Understanding JavaScript's this keyword

于 2013-07-13T07:44:30.800 回答
2

这将起作用:

function infiny() {
    return function test( output ) {
        alert(output);
        return test;
    }
}

也就是说,让内部函数通过给它一个名称来返回对自身的引用(我用过test,但你可以使用更有意义的东西)。

返回this不起作用,因为this它不是函数——即使你调用了函数,new你也会发现它this不是函数本身。有关使用this的更多信息,请查看MDN 对此有何评论

于 2013-07-13T07:44:48.227 回答
0

您根本不需要内部函数:

function infiny(x) {
    console.log(x)
    return infiny;
}
于 2013-07-13T09:02:16.090 回答