如果在“use strict”中不允许arguments.callee,我们就不能这样做
var f = function g() {
//g
}
因为在IE中不起作用(或者说“怪异”)http://kangax.github.com/nfe/#jscript-bugs,那么我们还有哪些其他选项可以引用函数本身的匿名函数?
答案 0 :(得分:3)
不要使用命名函数表达式。只需以正常方式声明并初始化它。
function f() {
f();
}
ES5严格的唯一可行替代方案是使用您问题中的代码,并处理IE糟糕的NFE实现。但是:你真的期望一个浏览器让NFE如此可怕的错误(ahem,IE)很快就能实现"use strict"
吗?
答案 1 :(得分:3)
正好 Y combinator的用途。
Here's an article by James Coglan about deriving the Y combinator in JavaScript.
答案 2 :(得分:1)
这是一种相当复杂的方法,但它有效:
var f = function() {
function f() {
if (confirm('Keep going?')) {
this.apply(this);
}
}
f.apply(f);
}
f();