【发布时间】:2011-01-11 05:07:30
【问题描述】:
很抱歉标题真的很奇怪,但这是我想要做的:
var f1 = function (param1, param2) {
// Is there a way to get an object that is ‘f1’
// (the current function)?
};
如您所见,我想从匿名函数中访问当前函数。
这可能吗?
【问题讨论】:
标签: javascript function
很抱歉标题真的很奇怪,但这是我想要做的:
var f1 = function (param1, param2) {
// Is there a way to get an object that is ‘f1’
// (the current function)?
};
如您所见,我想从匿名函数中访问当前函数。
这可能吗?
【问题讨论】:
标签: javascript function
给它命名。
var f1 = function fOne() {
console.log(fOne); //fOne is reference to this function
}
console.log(fOne); //undefined - this is good, fOne does not pollute global context
【讨论】:
是的——arguments.callee 是当前函数。
注意:这在 ECMAScript 5 中已弃用,可能会导致尾调用递归等性能下降。但是,它确实适用于大多数主流浏览器。
在你的情况下,f1 也可以。
【讨论】:
arguments.callee 不适合这种情况。它在 ECMAScript 5“严格模式”中已被弃用,并阻止缩小器进行某些优化。
您可以使用f1 访问它,因为该函数将被分配给变量f1 在调用之前:
var f1 = function () {
f1(); // Is valid
};
f1(); // The function is called at a later stage
【讨论】:
var f1 = function () {} 是一个匿名函数。 function f1() {} 不是。请参阅 stackoverflow.com/questions/103598/… 了解为什么应该避免使用 arguments.callee。
Function 对象在定义时还没有完全构建,因此(在我看来)没有分配给 f1。我认为 George 想要在匿名函数中递归,比如在 JQuery 事件处理程序或其他东西中。