9

如果“使用严格”中不允许 arguments.callee,我们不能这样做

var f = function g() {
    //g
}

因为在 IE 中不起作用(或者会“奇怪”地起作用)http://kangax.github.com/nfe/#jscript-bugs,那么我们还有哪些其他选项可以引用函数中的匿名函数本身?

4

3 回答 3

5

正是Y 组合器的用途。

这是 James Coglan 撰写的一篇关于在 JavaScript 中推导 Y 组合子的文章。

于 2011-04-22T16:27:41.597 回答
4

不要使用命名函数表达式。只需以正常方式声明和初始化它。

function f() {
    f();
}

ES5 strict 唯一可行的替代方法是使用您问题中的代码,并处理 IE 糟糕的 NFE 实现。但是:你真的期望一个让 NFE 如此严重错误(咳咳,IE)的浏览器"use strict"很快就会实现吗?

于 2011-04-22T16:20:47.703 回答
1

这是一种相当复杂的方法,但它有效:

http://jsfiddle.net/4KKFN/4/

var f = function() {
    function f() {
        if (confirm('Keep going?')) {
            this.apply(this);
        }
    }
    f.apply(f);
}

f();
于 2011-04-22T16:28:35.310 回答