匿名函数中的函数调用者名称

anj*_*esh 5 javascript anonymous-function

我猜想没有办法在匿名函数中获取函数调用者名称,是吗?

(function()
{
    var cls = function()
    {
        this.foo = function()
        {
            console.log(arguments.callee.caller); // null
            foo1();
        }

        var foo1 = function()
        {
            console.log(arguments.callee.caller); // foo
            foo2();
        }

        var foo2 = function()
        {
            console.log(arguments.callee.caller); // foo1
            cls.foo(); // local
        }

        var cls =
        {
            foo : function()
            {
                console.log(arguments.callee.caller); // cls.foo2
            }
        }
    }
    return (window.cls = cls);
})();

var c1 = new cls();
c1.foo();
Run Code Online (Sandbox Code Playgroud)

小智 4

正确 - 他们是匿名的。如果您需要知道被调用者的姓名,则需要为他们提供一个名称。类似的东西对你有用this.foo = function foo()吗?this.foo = function()

  • 您所建议的命名函数表达式在 IE 中存在严重问题。请参阅 kangax 的文章:http://kangax.github.com/nfe/ (2认同)