Jshint: рд▓реВрдкрдлрдВрдХ рдФрд░ рд▓реЗрдЯ / рдХреЙрдиреНрд╕реНрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдлрд╝рд░ре░ 2017  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jshint/jshint

рдХреБрдЫ рдореБрджреНрджреЛрдВ (#1301 рдФрд░ #2225, рд╢рд╛рдпрдж рдЕрдиреНрдп) рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди 2.9.4 рдЕрднреА рднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рд▓реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ:

const a = [], b = [];
for (let i in b) a.push(() => i);
for (let i of b) a.push(() => i);
for (let i = 0; i < 10; i++) a.push(() => i);

let i = 0;
while (i++ < 10) a.push(() => i);

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ @stevenventimiglia рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдирд┐рдпрдо рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛:

function foo(myLoopArr)
{
    /* globals Promise: false */
    for(let val in myLoopArr)
    {
        const myPromArr = [];
        myPromArr.push(function() {
            return new Promise();
        });
    }
}

рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдп рдХрд┐рд╕реА рдХрд╛рдо рдХрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рд▓реВрдк рдореЗрдВ рдХреЛрдИ рднреА рдорд╛рди рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА jshint рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХрддрд╛ рд╣реИ:

 myPromArr.push(function() {
                                ^ Functions declared within loops referencing an outer scoped variable may lead to confusing semantics.

рдмрд╕ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдмрддрд╛рдХрд░ рдЖрдЧ рд▓рдЧрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдмреБрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╕рднреА 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, I
JSHint рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрднреА рднреА рдареАрдХ рд╕реЗ рдЖрд░рд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рд╛рде рд╣реА: рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдиреБрдорддрд┐ рд╣реИ:

let i = 0;
while (i++ < 10) a.push(() => i);

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ i рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдХреЛрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ
рдЧрд▓рддреА рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП loopfunc рдореВрд▓ рд░реВрдк рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдФрд░ рдкрд╛рдардХ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ a
рд╕рдорд░реНрдкрд┐рдд i рдмрд╛рдзреНрдпрдХрд╛рд░реА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдмрдВрдзрди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдПрдХ
рдЗрд╕ рдмрдЧ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕рдХрд╛ рд╣рд┐рд╕рд╛рдм рджреЗрдирд╛ рди рднреВрд▓реЗрдВ
рдорд╛рдорд▓рд╛ред

рд╕рд╛рде рд╣реА: рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

рддреБрдо рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛ... рдореИрдВ рдХрд┐рддрдирд╛ рдореВрд░реНрдЦ рд╣реВрдВ... ^__^
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЙрдореНрдореАрдж рд╣реИ?

рд╣рдореЗрдВ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЛрдИ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ рдореБрджреНрджрд╛ jshint 2.9.5 рдореЗрдВ рдмрдирд╛ рд╣реБрдЖ рд╣реИред

рдпрд╣ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐ рдХреЛрдб W083 рд╣реИред

@overlookmotel - рдкрд╛рдВрдЪ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдпрд╛ рддреЛ рдЬрдЧрд╣ рдкрд░ рд╣реИ /*jshint loopfunc: true */ рдЖрдкрдХреЗ .js рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдпрд╛ рдЬреЛрдбрд╝рдиреЗ "loopfunc" : true, рдЖрдкрдХреЗ рд▓рд┐рдП .jshintrc рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ 5+ рд╕рд╛рд▓ рдмреАрдд рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рднреА рд╕рдордп рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ @stevenventimiglia рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдирд┐рдпрдо рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛:

function foo(myLoopArr)
{
    /* globals Promise: false */
    for(let val in myLoopArr)
    {
        const myPromArr = [];
        myPromArr.push(function() {
            return new Promise();
        });
    }
}

рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдп рдХрд┐рд╕реА рдХрд╛рдо рдХрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рд▓реВрдк рдореЗрдВ рдХреЛрдИ рднреА рдорд╛рди рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА jshint рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХрддрд╛ рд╣реИ:

 myPromArr.push(function() {
                                ^ Functions declared within loops referencing an outer scoped variable may lead to confusing semantics.

рдмрд╕ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдмрддрд╛рдХрд░ рдЖрдЧ рд▓рдЧрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдмреБрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

@andrew-st-angelo-77media рдЕрдЪреНрдЫреА рдиреМрдХрд░реА рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧред рдореБрдЭреЗ рдмрд╕ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рднрд▓реЗ рд╣реА рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕реНрдХреЙрдкреНрдб рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Daniel-Hug picture Daniel-Hug  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

damyanpetev picture damyanpetev  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arian picture arian  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MtDalPizzol picture MtDalPizzol  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fbarda picture fbarda  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ