JS的调用者属性为“foo = function()”编码风格

时间:2013-06-26 10:14:39

标签: javascript function-declaration

我想将“caller”的属性用于定义为here

的函数

它适用于这种函数声明

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

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

f()

JSfiddle for this

但是我的函数声明就像

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


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

 f()

我得到了未定义(基本上没有得到任何东西)

JSfiddle for this

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

1 个答案:

答案 0 :(得分:1)

这个功能......

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

...没有名字。它是一个匿名函数,分配给标识为f的变量。如果您将该函数设为命名函数表达式

,它将按原样工作
f = function f() {
    g();
};

请注意,由于从全局执行上下文调用了匿名函数,因此它的caller属性为null(请注意,在JSFiddle中,它不会是null,它将是无论JSFiddle调用什么函数来调用你的代码。)

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