Skip to content

Latest commit

 

History

History
111 lines (61 loc) · 3.31 KB

File metadata and controls

111 lines (61 loc) · 3.31 KB

Code Smell 213 - Hoisting

Code Smell 213 - Hoisting

You can prevent undefined

TL;DR: Declare your variables and look after the scope

Problems

  • Readability

  • Least Surprise Principle violation

  • Variable Shadowing

Solutions

  1. Be explicit on declarations

  2. Use 'const' declaration when possible.

  3. Declare variables at the beginning of the scope.

  4. Use strict mode

Context

Hoisting allows variable declarations to be moved to the top of their containing scope during the compilation phase.

Variables declared with var and function declarations are "hoisted" to the top of their respective scopes automatically in several languages.

Sample Code

Wrong

console.log(willBeDefinedLater); 
// Output: undefined (but no error)

var willBeDefinedLater = "Beatriz";
console.log(willBeDefinedLater); 
// Output: "Beatriz"

Right

const dante = "abandon hope all ye who enter here"; 
// Declaring a constant 'dante'
// with value "abandon hope all ye who enter here"

console.log(dante); 
// Output: "abandon hope all ye who enter here"

dante = "Divine Comedy"; // Error: Assignment to constant variable

Detection

[X] Semi-Automatic

We can perform mutation testing to check if changing the scope of the variables brings unexpected results.

Tags

  • Mutability

Conclusion

Hoisting is yet another magic tool some compilers provide to favor lazy programmers.

But if it fights back in debugging time.

Relations

Code Smell 116 - Variables Declared With 'var'

Code Smell 42 - Warnings/Strict Mode Off

More Info

Wikipedia

Strict Mode

Disclaimer

Code Smells are my opinion.

Credits

Photo by Ash from Modern Afflatus on Unsplash


The best error message is the one that never shows up.

Thomas Fuchs

Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code