2

假设我们定义了一个简单地将其输入增加一些存储值的函数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

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

4

2 回答 2

5

您可以为函数文字命名:

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

f.dd = 1;

但是,这在旧版本的 IE/JScript 中不能正常工作,因为me并且f不引用同一个对象。(已弃用且在严格模式下不可用)替代方案是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;
};
于 2013-08-17T16:56:42.743 回答
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

于 2013-08-17T17:00:00.777 回答