'eslint' was used before it was defined
74 fs.writeFileSync(path.join(projectPath, 'views', 'index.html'), '')
75 fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), tsconfig)
76 fs.writeFileSync(path.join(projectPath, '.eslintignore'), eslintIgnore)
77 fs.writeFileSync(path.join(projectPath, 'eslint.config.js'), eslint) 78}
79
80const tsconfig = `{
'eslintIgnore' was used before it was defined
73 fs.writeFileSync(path.join(projectPath, 'test', 'index.test.ts'), '')
74 fs.writeFileSync(path.join(projectPath, 'views', 'index.html'), '')
75 fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), tsconfig)
76 fs.writeFileSync(path.join(projectPath, '.eslintignore'), eslintIgnore) 77 fs.writeFileSync(path.join(projectPath, 'eslint.config.js'), eslint)
78}
79
'tsconfig' was used before it was defined
72 fs.writeFileSync(path.join(projectPath, 'src', 'index.ts'), '')
73 fs.writeFileSync(path.join(projectPath, 'test', 'index.test.ts'), '')
74 fs.writeFileSync(path.join(projectPath, 'views', 'index.html'), '')
75 fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), tsconfig) 76 fs.writeFileSync(path.join(projectPath, '.eslintignore'), eslintIgnore)
77 fs.writeFileSync(path.join(projectPath, 'eslint.config.js'), eslint)
78}
'packageJson' was used before it was defined
54
55function installDependencies (projectName) {
56 const projectPath = path.join(process.cwd(), projectName)
57 fs.writeFileSync(path.join(projectPath, 'package.json'), packageJson(projectName)) 58 execSync('npm install', { cwd: projectPath, stdio: 'inherit' })
59 execSync('npm install --save-dev eslint @eslint/js @types/eslint__js typescript @typescript-eslint/eslint-plugin eslint-define-config ts-node --loglevel=error', { cwd: projectPath, stdio: 'inherit' })
60}
Description
It is recommended to use a variable only after it is defined as it might produce errors at runtime.
In JavaScript, prior to ES6, variable and function declarations are hoisted to the top of a scope, so it's possible to use identifiers before their formal declarations in code. This can be confusing and some believe it is best to always declare variables and functions before using them.
In ES6, block-level bindings (let
and const
) introduce a "temporal dead zone" where a ReferenceError
will be thrown with any attempt to access the variable before its declaration.
Bad Practice
alert(a);
var a = 10;
f();
function f() {}
function g() {
return b;
}
var b = 1;
{
alert(c);
let c = 1;
}
Recommended
var a;
a = 10;
alert(a);
function f() {}
f(1);
var b = 1;
function g() {
return b;
}
{
let c;
c++;
}