JavaScript中的无限内联函数调用

时间:2013-07-13 07:41:30

标签: javascript method-chaining

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

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

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

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

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

这可能吗? - 我的当前示例显示没有溢出,语法错误,失败,除了它在('a')之后不调用函数调用。

3 个答案:

答案 0 :(得分:3)

您可以返回named function expression,返回对自身的引用:

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

Demo


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

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

答案 1 :(得分:2)

这将有效:

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

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

返回this不起作用,因为this不是函数 - 即使您使用new调用函数,您会发现this不是函数本身。有关使用this的详细信息,请查看what MDN has to say about it

答案 2 :(得分:0)

你根本不需要内在功能:

function infiny(x) {
    console.log(x)
    return infiny;
}