1

在 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 中做到这一点?

4

2 回答 2

3

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.
}
于 2013-05-05T19:15:29.857 回答
2

从技术上讲,这实际上也不是 C - 它是 cpp 宏语言。您可以将您的系统配置为在您的 Javascript 上使用 cpp 处理器,但这里的许多人会认为这是一种非常邪恶的行为。我实际上对我所有的 Javascript 代码都这样做了。

于 2013-05-05T19:13:02.787 回答