我想将“caller”的属性用于定义的函数here
对于这种风格的函数声明来说效果很好
function g() {
alert(g.caller.name) // f
}
function f() {
alert(f.caller.name) // undefined
g()
}
f()
但是我的函数声明是这样的
g = function() {
alert(g.caller.name) // expected f, getting undefined
}
f = function() {
alert("calling f")
alert(f.caller.name) // undefined
g()
}
f()
我变得不确定(基本上没有得到任何东西)
有什么方法可以使用调用者属性而无需重写我的代码吗?另外,我希望我在使用和函数声明方面没有犯任何错误,因为我对使用 JS 还很陌生。
这个功能...
f = function() {
g();
};
...没有名字。它是一个匿名函数,分配给一个标识符为
f
的变量。如果您将该函数设为命名函数表达式:,它将按原样工作
f = function f() {
g();
};
请注意,由于该匿名函数是从全局执行上下文中调用的,因此它的
caller
属性是 null
(请注意,在 JSFiddle 中,它不会是 null
,它将是 JSFiddle 调用来调用您的代码的任何函数).
您已经演示了函数声明和函数表达式之间的区别之一。您的第一个示例显示了函数声明。他们必须有一个标识符。您的第二个示例使用函数表达式。标识符是可选的,并且仅在函数本身的范围内。