9

「usestrict」でarguments.calleeが許可されておらず、実行できない場合

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

IEでは機能しない(または「奇妙に」機能する)http://kangax.github.com/nfe/#jscript-bugsので、関数内の無名関数を参照する必要がある他のオプションは何ですか?自体?

4

3 に答える 3

5

それがまさにY コンビネータの目的です。

JavaScript での Y コンビネータの導出に関する James Coglan の記事を次に示します。

于 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 に答える