Javascript 定义函数的属性

Javascript 定义函数的属性,javascript,Javascript,在阅读本文时,我对定义自己的函数属性一节很感兴趣。让我举个例子: function foo( ) { foo.bar++; return foo.bar; }; foo.bar = 0; foo( ); // returns 1 foo( ); // returns 2 因此,上面演示了如何使用这些属性在多个函数调用之间持久化数据 我知道在上面的示例中属性基本上是公共的,但是除了使用闭包将属性私有化的明显示例之外,还有什么原因不应该使用这种方法,或者为什么更喜欢使用其

在阅读本文时,我对定义自己的函数属性一节很感兴趣。让我举个例子:

function foo( ) { 

    foo.bar++;

    return foo.bar;
};

foo.bar = 0;

foo( ); // returns 1
foo( ); // returns 2
因此,上面演示了如何使用这些属性在多个函数调用之间持久化数据


我知道在上面的示例中属性基本上是公共的,但是除了使用闭包将属性私有化的明显示例之外,还有什么原因不应该使用这种方法,或者为什么更喜欢使用其他持久化数据的方法。

在经典的OO语言术语中,它们本质上是公共静态变量(不仅仅是公共变量)或类变量,而不是实例变量。如果您对此类属性(不属于特定实例而是属于函数本身的属性)有用例,则没有理由不使用它们。

当函数调用之间存在持久状态时,这是OOP。如果是OOP,则使用原型及其实例。实例代表状态。当需要重置状态时,只需创建一个新实例。没有繁琐的微观管理

但是,将内容存储在函数对象上可能有助于一次性缓存一些繁重的计算。考虑一个函数:

calcCorpuscularVelocity.COEF = Math.sqrt(Math.pow(Math.sin(Math.PI), Math.E));
function calcCorpuscularVelocity (x) {
    return x * calcCorpuscularVelocity.COEF;
}