for (let i = 0; i < state.columns.length; i++) { var column = state.columns[i]; var sortIndex; var fsColumn = firstSortColumns.find((v, i) => { sortIndex = i; return v.dataField === column.dataField; }); if (fsColumn) { //... } else { //... } }La función declarada en un bucle contiene referencias no seguras a la(s) variable(s) 'sortIndex', 'column'.
Recibo una advertencia como esta, ¿cómo puedo solucionarlo?
Su linter está siendo demasiado cauteloso aquí. Dado que la función que pasa para find no se llama de forma asíncrona, el hecho de que el valor de la column pueda cambiar no es un problema.
Si fuera asíncrono, entonces podría resolver el problema usando let en lugar de var , ya que tiene un alcance de bloque en lugar de un alcance de función (y hacerlo cerraría su linter).
Declare variables fuera de la iteración (bucle) y modifíquelas dentro del bucle for.
var column, fsColumn, sortIndex; for (let i = 0; i < state.columns.length; i++) { column = state.columns[i]; sortIndex; fsColumn = firstSortColumns.find((v, i) => { sortIndex = i; return v.dataField === column.dataField; }); if (fsColumn) { //... } else { //... } }