我正在定义一个类:
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
};
答案 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
直接在a
,b
和c
上运行,因此它不需要成为MyClass.prototype
的一部分。虽然,它可能是。