一尘不染

如何修复jslint错误“不要在循环内创建函数”?

javascript

我正在努力使我们所有的JS代码都通过jslint传递,有时会进行大量调整,以便暂时获得旧版代码传递,以期稍后对其进行适当修复。

jslint抱怨一件事,我没有工作环境。那就是当使用这样的构造时,我们会收到错误“不要在循环内创建函数”。

for (prop in newObject) {
    // Check if we're overwriting an existing function
    if (typeof newObject[prop] === "function" && typeof _super[prop] === "function" &&
        fnTest.test(newObject[prop])) {
        prototype[prop] = (function(name, func) {
            return function() {
                var result, old_super;

                old_super = this._super;
                this._super = _super[name];
                result = func.apply(this, arguments);
                this._super = old_super;

                return result;
            };
        })(prop, newObject[prop]);
    }
}

此循环是经典继承的JS实现的一部分,在经典实现中,扩展现有类的类在调用扩展类的成员时保留扩展类的超级属性。

但是,我们还在循环中创建了函数的其他实例。

到目前为止,唯一的解决方法是将这些JS文件从jslint中排除,但是我们希望将jslint用于代码验证和语法检查,这是我们持续集成和构建工作流程的一部分。

有没有更好的方法来实现这样的功能,还是有办法通过jslint调整代码呢?


阅读 266

收藏
2020-05-01

共1个答案

一尘不染

下面是代码:

function make_handler(div_id) {
    return function () {
        alert(div_id);
    };
}
for (i ...) {
    div_id = divs[i].id;
    divs[i].onclick = make_handler(div_id);
}
2020-05-01