当前位置: 首页 > 面试题库 >

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

梁丘书
2023-03-14
问题内容

我正在努力使我们所有的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调整代码呢?


问题答案:

下面是代码:

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


 类似资料:
  • 我得到这个错误: JsHint(W083):不要在循环中生成函数。 使用以下代码时: 基本上,我是在一个对象的属性中循环,对于每个属性,我使用操作符设置其他对象属性的真/假。 阅读一些文档,我看到: JSHint和ESLint在for、while或do语句体中遇到函数表达式。 这个错误合法吗? 如果是,如何更好地重写这些行? 如果否,如何使用JsHint禁用此特定错误验证

  • 问题内容: 我试图在迭代对象列表的循环内创建: 现在,如果我遍历lambda列表并这样称呼它们: 我得到相同的价值。这是最后的价值obj在,因为那是在列表迭代器的块中的最后一个变量。有什么想法可以很好地重写代码以使其正常工作吗? 问题答案: 使用此行:

  • 问题内容: 我正在尝试在循环内创建函数: 问题在于所有功能最终都相同。这三个函数都没有返回0、1和2,而是返回2: 为什么会发生这种情况,我应该怎么做才能获得分别输出0、1和2的3个不同函数? 问题答案: 你在后期绑定方面遇到了问题-每个函数都i尽可能晚地查找(因此,在循环结束后调用时,i将设置为2)。 可以通过强制早期绑定轻松修复:更改为以下形式: 缺省值(右手i输入i=i是参数名的默认值,i左

  • FileLoaderImportCircularReferenceException:在“/app/config/routing_dev.yml”(“/app/config/routing_dev.yml”)中检测到循环引用 我正在努力做到这一点:http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html#mor

  • 我使用Laravel 8框架的PHP和我试图集成贝宝到我的本地网络。然而,我被困在create_order_error,即使我严格遵循贝宝提供的一些样本片段,我仍然遇到这个亲 参考文献: https://developer.paypal.com/demo/checkout/#/pattern/server 错误:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  • 问题内容: 我正在使用ajax google maps脚本,需要在for循环中创建动态变量名称。 我想的是:,,等。我想这有什么问题 Firebug给了我这个: 问题答案: 为此使用数组。