2016-10-24 2 views
2

У меня есть две анонимные функции, созданные внутри цикла, но jshint дает предупреждение, когда функция anon ссылается на переменную, не переданную ей.Предупреждение jslint «Не выполнять функции внутри цикла» только для функций, ссылающихся на внешние переменные?

Почему это?

(function(){ 
    for(var i=0; i<5; ++i){ 
    var age = 9001; 
    //This has a jshint warning, as it uses age 
    var cutoffs = [1800,12000].map(function(cutoff){ 
     return cutoff < age; 
    }); 
    //but this doesn't cause a warning, despite creating a function inside a loop 
    var cutoffs2 = [1800,12000].map(function(cutoff){ 
     return cutoff < 42; 
    }); 
    } 
})(); 
+1

Просто проигнорируйте это, перевязка плохая и подумайте, что вы объявляете функцию внутри цикла. – Eric

+0

@ Эрик Но я объявляю функцию внутри цикла, мне просто интересно, почему она не дает предупреждения для обеих функций, объявленных внутри цикла. – mtfurlan

+3

Интересно, это потому, что функция сокращения не ссылается ни на что из закрытия - так может ли она быть оптимизирована во время выполнения? ничто не основано на этом, но это одно отличие между ними. –

ответ

3

Это просто плохое предупреждение, которое должно было быть изменено.

С jshint issue я открыл:

Это предупреждение было первоначально сообщалось, для всех функций внутри цикла. Только в gh-1887 (выпущенном в версии 2.5.7) предупреждение было ограничено конкретными случаями в соответствии с привязками, вокруг которых оно было закрыто . Текст, вероятно, также должен был быть обновлен в то время.

Будет исправлено: jshint pull request 3058, всякий раз, когда дело касается.

Смежные вопросы