我正在尝试将一个函数链接到自身,所以我可以这样调用它(无限地):
infiny()('a')('b')('c')('d');
到目前为止,我有这个代码,但它只是在infiny()
之后才捕获第一个函数调用:
function infiny() {
return function( output ) {
alert(output);
return this;
}
}
我希望它在这里输出四个警报,对于所有四个参数:a, b, c and d
这可能吗? - 我的当前示例显示没有溢出,语法错误,失败,除了它在('a')
之后不调用函数调用。
答案 0 :(得分:3)
您可以返回named function expression,返回对自身的引用:
function infiny() {
return function ret( output ) {
alert(output);
return ret;
}
}
infiny()('a')('b')('c')('d');
this
引用示例中的window
对象。这是因为简单地使用没有方法语法的()
调用函数不会设置this
引用,在这种情况下,在非严格模式下,this
引用将设置为{ {1}}对象。
在#11.2.3和window
/ thisArg
- >上描述了null
解析。关于#10.4.3的undefined
翻译。规范措辞不是很友好,所以这里有一篇文章解释了在输入函数执行上下文时可以设置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;
}