函数可以在javascript中引用自身吗?

glo*_*loo 2 javascript function this

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

var obj={}
obj.dd=1
obj.f=function(x){
    return x+this.dd
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以dd为以下内容创建一个闭包,但这将创建一个静态增量,而不是稍后可以更改的增量:

var dd=1
var f=function(x){
    return x+dd
}
Run Code Online (Sandbox Code Playgroud)

我们可以选择将其存储dd在函数本身中:

var obj={}
obj.f=function(x){
    return x+this.f.dd
}
obj.f.dd=1
Run Code Online (Sandbox Code Playgroud)

我很好奇一个函数是否有可能在不通过父对象的情况下检索附加到其自身的变量,就像一个self关键字,它引用该函数本身并允许以下操作:

var f=function(x){
    return x+self.dd
}
f.dd=1
Run Code Online (Sandbox Code Playgroud)

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

Ry-*_*Ry- 5

您可以为函数文字赋予一个名称:

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

f.dd = 1;
Run Code Online (Sandbox Code Playgroud)

但是,这在旧版本的IE / JScript中无法正常工作,因为me并且f不会引用相同的对象。(不推荐使用,并且不能在严格模式下使用)替代方案是arguments.callee

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

f.dd = 1;
Run Code Online (Sandbox Code Playgroud)

另外,您关于关闭的说明不太正确;以后甚至可以通过其他功能对其进行更改:

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

var setdd = function(_dd) {
    dd = _dd;
};
Run Code Online (Sandbox Code Playgroud)