DEV Community

Cover image for Code Smell 213 - Hoisting
Maxi Contieri
Maxi Contieri

Posted on • Originally published at maximilianocontieri.com

3 1

Code Smell 213 - Hoisting

You can prevent undefined

TL;DR: Declare your variables and watch 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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

More Info

Wikipedia

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


This article is part of the CodeSmell Series.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay