一个函数可以在javascript中引用自己吗?

时间:2013-08-17 16:53:29

标签: javascript function this

假设我们定义一个函数,只需将其输入增加一些存储值dd

var obj={}
obj.dd=1
obj.f=function(x){
    return x+this.dd
}

或者你可以为dd创建一个闭包,如下所示,但这会创建一个静态增量,而不是可以在以后更改的那个:

var dd=1
var f=function(x){
    return x+dd
}

我们也可以在函数本身中存储dd

var obj={}
obj.f=function(x){
    return x+this.f.dd
}
obj.f.dd=1

我很好奇函数是否有可能在不经过父对象的情况下检索附加到自身的变量,类似于self关键字,它将引用函数本身并允许以下内容:

var f=function(x){
    return x+self.dd
}
f.dd=1

我知道没有必要做这样的事情,但我认为如果可以的话会很酷。

2 个答案:

答案 0 :(得分:4)

您可以为函数文字命名:

var f = function me(x) {
    return x + me.dd;
};

f.dd = 1;

但是,在旧版本的IE / JScript中,这不能正常工作,因为mef不引用同一个对象。 (已弃用且在严格模式下不可用)替代方案为arguments.callee

var f = function(x) {
    return x + arguments.callee.dd;
};

f.dd = 1;

另外,关于关闭的说明并不完全正确;它可以在以后改变,甚至通过另一个功能:

var dd = 1;
var f = function(x) {
    return x + dd;
};

var setdd = function(_dd) {
    dd = _dd;
};

答案 1 :(得分:2)

函数是一个对象。如果引用包含函数的var:

var f = function (x) {
    return x + f.dd
};

f.dd = 1;

alert(f(1));

结果:2

如果该功能已命名,您可以这样做:

function foo(x) {
    return x + foo.dd;
}

foo.dd = 1;
alert(foo(1));

结果:2