1 回答
TA贡献1951条经验 获得超3个赞
只有在变量修改后执行 lambda(在您的情况下为函数参数)时,才能访问修改后的闭包。在你的情况下,$.each应该立即执行 lambda,所以它不应该是一个问题。但是 ReSharper 不知道被调用的函数是否会立即执行传递的 lambda 或将其存储以供以后执行,尤其是在具有动态类型的 JavaScript 中。所以它总是给出警告。
请注意,您找到的文章是指 C#,它建议的修复仅对 C# 有效。在 JS 中你不能通过 using 来解决问题var i1 = i,因为i1声明的变量var会有一个函数作用域,而你需要它有一个块作用域。因此,如果您可以使用 ECMAScript 2015,那么您可以使用let或const声明具有块作用域的变量,例如:
var permissions = $("#" + me.map.permissionsGridHtmlId).data("kendoGrid").dataSource.data();
var data = form.serializeArray();
for (var i = 0; i < permissions.length; i++) {
var record = permissions[i].toJSON();
let i1 = i;
$.each(record, function (key, value) {
data.push({
name: "Permissions[" + i1 + "]." + key,
value: value
});
});
}
添加回答
举报
