我想将“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很新。
答案 0 :(得分:1)
这个功能......
f = function() {
g();
};
...没有名字。它是一个匿名函数,分配给标识为f
的变量。如果您将该函数设为命名函数表达式:
f = function f() {
g();
};
请注意,由于从全局执行上下文调用了匿名函数,因此它的caller
属性为null
(请注意,在JSFiddle中,它不会是null
,它将是无论JSFiddle调用什么函数来调用你的代码。)
您已经演示了函数声明和函数表达式之间的一个区别。您的第一个示例显示了函数声明。他们必须有一个标识符。第二个示例使用函数表达式。标识符是可选的,并且仅在函数本身的范围内。