在 C 中,您可以执行以下操作:
#define NESTEDFOR(i,j,n) for(i=0; i<n; i++) for(j=0; j<n; j++)
所以你可以使用NESTEDFOR(x,y,200)
来节省时间,因为它会被替换为for(x=0; x<200; x++) for(y=0; y<200; y++)
我想在 JavaScript 中没有办法做到这一点,因为它是一种解释语言,但我不确定。
有没有办法在 JavaScript 中做到这一点?
在 C 中,您可以执行以下操作:
#define NESTEDFOR(i,j,n) for(i=0; i<n; i++) for(j=0; j<n; j++)
所以你可以使用NESTEDFOR(x,y,200)
来节省时间,因为它会被替换为for(x=0; x<200; x++) for(y=0; y<200; y++)
我想在 JavaScript 中没有办法做到这一点,因为它是一种解释语言,但我不确定。
有没有办法在 JavaScript 中做到这一点?
JavaScript 不支持完全等价的,但您可以将其定义为迭代器——类似于s 的迭代器方法Array
:
function nestedFor(n, fn) {
for (var i = 0; i < n; i++) {
for (var j = 0; j < n; j++) {
if (false === fn(i, j)) {
return;
}
}
}
}
nestedFor(200, function (i, j) {
// etc.
// `return false` to stop looping
});
此外,一些参数验证的一种选择:
function nestedFor(n, fn) {
if (typeof n !== 'number' || !isFinite(n)) {
throw new TypeError('Invalid argument: Expected a finite number.');
}
if (typeof fn !== 'function') {
throw new TypeError('Invalid argument: Expected a function.');
}
// etc.
}
从技术上讲,这实际上也不是 C - 它是 cpp 宏语言。您可以将您的系统配置为在您的 Javascript 上使用 cpp 处理器,但这里的许多人会认为这是一种非常邪恶的行为。我实际上对我所有的 Javascript 代码都这样做了。