2017-02-08 4 views
2

Я использую ESLint, чтобы проверить код javascript на сборке, и я получаю ошибку un-unused-vars, за которой следует ошибка no-undef для того же переменная. Я не могу понять, как переменная может быть как неиспользованной, так и неопределенной.ESLint no-unused-vars и no-undef error, но переменная используется

export function count(){ 
    if (counter > 3){ 
     const a = 'big'; 
    } else { 
     const a = 'small'; 
    } 
    return a; 
} 

Учитывая представление pseudode выше я получаю следующие ошибки из ESLint:

line 3 error 'a' is defined but never used no-unused-vars 
line 5 error 'a' is defined but never used no-unused-vars 
line 7 error 'a' is not defined    no-undef 

Любые идеи о том, как обойти это?

ответ

4

const является блочным блоком. Итак, что вы делаете, создается a внутри того, какой блок выполняется, а не использует его, позволяя ему выйти из области видимости, а затем пытается вернуть разныеa, что функция закрывается (что вызовет ReferenceError, если a не закрывается). Строка return a; не относится к a, объявленному в любом из блоков над ней; К тому времени он уже вышел из сферы действия.

Таким образом, вместо:

export function count(){ 
    const a = counter > 3 ? 'big' : 'small'; 
    return a; 
} 

или

export function count(){ 
    let a; // Declared outside the blocks 
    if (counter > 3){ 
     a = 'big'; 
    } else { 
     a = 'small'; 
    } 
    return a; 
} 
+0

Я думаю, вы должны отметить, что 'a' в случае не имеет ничего общего с тем, в другой; они различны, потому что переменная воссоздана и не используется. – Li357

+0

@AndrewLi: Да, ты, наверное, прав. Версия этого предложения, с которой я начинал (и никогда не публиковал, я изменил ее в первую очередь), сделал отчет, но неясно. :-) –

1

Вы определяете свой сопзЬ внутри, если он не живет в области видимости функции.

вам нужно определить его как

export function count(){ 
    let a; 
    if (counter > 3){ 
     a = 'big'; 
    } else { 
     a = 'small'; 
    } 
    return a; 
} 

Больше информации, прочитать следующие главы https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures