Javascript类 - 函数优化(函数内的函数)

时间:2014-09-03 11:01:43

标签: javascript function class optimization

我正在定义一个类:

MyClass = function () {
    // Class member variables here
};

MyClass.prototype.MyFunction = function () {
    // Do stuff, see below
};

我不确定的是MyFunction。这是我目前的模式(函数中的函数)。我这样做是因为它看起来很整洁。 MyFunctionSubFunction只与MyFunction绑定,所以从样式的角度来看,我假设MyFunctionSubFunction应该在MyFunction的定义范围内。

MyClass.prototype.MyFunction = function () {
    var i, j, iIter, jIter, a, b, c, val;
    var MyFunctionSubFunction = function (a, b, c) {
        // Do things with a, b and c
    };

    // iIter and jIter are set to values depending on what is going on

    for(i=0; i<iIter; i++) {
        for(j=0; j<jIter; j++) {
            // a, b and c are now set depending on i and j

            MyFunctionSubFunction(a, b, c);
        }
    }
};

这是一个很好的编码实践(函数中的函数)吗?

这是针对速度和其他一切进行优化的吗?

MyFunction(上层函数)被调用大约每秒250次(它是一个游戏,这是AI代码的一部分)。

或者我应该做这样的事情吗?:

MyClass.prototype.MyFunction = function () {
    var i, j, iIter, jIter, a, b, c, val;

    // iIter and jIter are set to values depending on what is going on

    for(i=0; i<iIter; i++) {
        for(j=0; j<jIter; j++) {
            // a, b and c are now set depending on i and j

            this.MyFunctionSubFunction(a, b, c);
        }
    }
};

MyClass.prototype.MyFunctionSubFunction = function (a, b, c) {
    // Do things with a, b and c
};

1 个答案:

答案 0 :(得分:1)

MyFunctionSubFunction内定义MyFunction会产生开销,因为每次调用MyFunction时都会创建一个名为MyFunctionSubFunction的新函数。

如果您不希望MyFunctionSubFunction泄漏,可以使用IIFE:

(function(){
    var MyFunctionSubFunction = function (a, b, c) {
        // Do things with a, b and c
    };
    MyClass.prototype.MyFunction = function () {
        // use MyFunctionSubFunction here somewhere
    };
})()

由于MyFunctionSubFunction直接在abc上运行,因此它不需要成为MyClass.prototype的一部分。虽然,它可能是。