0

我想将“调用者”的属性用于此处定义的函数

它适用于这种风格的函数声明

    function g() {
      alert(g.caller.name) // f
}

   function f() {
      alert(f.caller.name) // undefined
      g()
}

f()

JSfiddle 为此

但是我的函数声明类似于

    g = function() {
      alert(g.caller.name) // expected f, getting undefined
    }


   f = function() {
     alert("calling f")
     alert(f.caller.name) // undefined
     g()
   }

 f()

而且我越来越不确定(基本上什么都没有)

JSfiddle 为此

有什么方法可以使用调用者属性而无需重写我的代码?另外,我希望我在使用和函数声明方面没有犯任何错误,因为我对使用 JS 很陌生。

4

1 回答 1

1

这个功能...

f = function() {
    g();
};

...没有名字。这是一个匿名函数,分配给一个带有标识符的变量f如果您将该函数设为命名函数表达式,它将按原样工作:

f = function f() {
    g();
};

请注意,由于该匿名函数是从全局执行上下文中调用的,因此它的caller属性是null(请注意,在 JSFiddle 中,它不会是null,它将是 JSFiddle 调用以调用您的代码的任何函数)。

您已经演示了函数声明和函数表达式之间的区别之一。您的第一个示例显示了函数声明。他们必须有一个标识符。您的第二个示例使用函数表达式。标识符是可选的,并且仅在函数本身的范围内。

于 2013-06-26T10:18:34.727 回答