Differences Between var, let, and const
1. Overview of var, let, and const
|
var |
let | const | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Function-scoped | Block-scoped | Block-scoped | ||||||||||||||||||||||||
Re-declaration |
Allowed within the same scope | Not allowed in the same scope | Not allowed in the same scope | ||||||||||||||||||||||||
Re-assignment |
Allowed | Allowed | Not allowed after initialization | ||||||||||||||||||||||||
Initializationif (true) { var x = 10; let y = 20; const z = 30; } console.log(x); // 10 (accessible because of function scope) console.log(y); // ReferenceError (block-scoped) console.log(z); // ReferenceError (block-scoped) |
Can be declared without initialization | Can be declared without initialization | Must be initialized at the time of declaration | ||||||||||||||||||||||||
Hoisting |
Hoisted but initialized to undefined | Hoisted but not initialized | Hoisted but not initialized |
Feature | var | let | const |
---|---|---|---|
Re-declaration | Allowed | Not allowed | Not allowed |
Re-assignment | Allowed | Allowed | Not allowed |
Type | Function Scope | Block Scope |
---|---|---|
var | Variables are scoped to the enclosing function. | Does not support block scope. A var inside a block (if, for, etc.) leaks into the enclosing function or global scope. |
let / const | Not function-scoped. | Variables are confined to the block they are declared in. |
Feature | var | let | const |
---|---|---|---|
Re-declaration | Allowed | Not allowed | Not allowed |
Re-assignment | Allowed | Allowed | Not allowed |
Example:
if (true) { var x = 10; let y = 20; const z = 30; } console.log(x); // 10 (accessible because of function scope) console.log(y); // ReferenceError (block-scoped) console.log(z); // ReferenceError (block-scoped)
4. Hoisting Behavior
|
Hoisting Behavior |
||||||||
---|---|---|---|---|---|---|---|---|---|
var |
Hoisted to the top of the scope but initialized as undefined. | ||||||||
let// Re-declaration var a = 10; var a = 20; // Allowed let b = 30; // let b = 40; // SyntaxError: Identifier 'b' has already been declared const c = 50; // const c = 60; // SyntaxError: Identifier 'c' has already been declared // Re-assignment a = 15; // Allowed b = 35; // Allowed // c = 55; // TypeError: Assignment to constant variable |
Hoisted but not initialized. Accessing it before declaration causes a ReferenceError. | ||||||||
const |
Hoisted but not initialized. Must be initialized at the time of declaration. |
Feature | let and const |
---|---|
Block Scope | Both are confined to the block in which they are declared. |
No Hoisting Initialization | Both are hoisted but cannot be accessed before initialization. |
Better Practice | Preferred over var for predictable scoping. |
5. Similarities Between let and const
Scenario | Recommended Keyword |
---|---|
Re-declare variables or use function scope | var (generally avoid unless necessary for legacy code). |
Variables that may change | let (e.g., counters, flags, intermediate calculations). |
Variables that should not change | const (e.g., configuration settings, fixed values). |
Feature | let and const |
---|---|
Block Scope | Both are confined to the block in which they are declared. |
No Hoisting Initialization | Both are hoisted but cannot be accessed before initialization. |
Better Practice | Preferred over var for predictable scoping. |
Scenario | Recommended Keyword |
---|---|
Re-declare variables or use function scope | var (generally avoid unless necessary for legacy code). |
Variables that may change | let (e.g., counters, flags, intermediate calculations). |
Variables that should not change | const (e.g., configuration settings, fixed values). |
7. Explanation of Hoisting
What is Hoisting?
Hoisting is JavaScript's default behavior of moving declarations to the top of their scope during the compile phase.
- var: Hoisted and initialized to undefined.
- let / const: Hoisted but not initialized. This creates a temporal dead zone (TDZ) from the start of the block until the declaration is encountered.
Why Hoisting Works This Way?
- Compilation Phase: JavaScript first scans the code to create a memory space for variable and function declarations. At this stage:
- var variables are initialized to undefined.
- let and const variables are "hoisted" but left uninitialized, hence the TDZ.
- Function declarations are fully hoisted.
- Execution Phase: JavaScript starts executing code line by line. Variables and functions are assigned values during this phase.
8. Summary of Hoisting
|
Hoisting | Access Before Declaration | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
var | Hoisted and initialized to undefined. | Allowed but value is undefined. | ||||||||||||
let | Hoisted but not initialized. | Causes a ReferenceError. | ||||||||||||
const | Hoisted but not initialized. | Causes a ReferenceError. |
Example:
if (true) { var x = 10; let y = 20; const z = 30; } console.log(x); // 10 (accessible because of function scope) console.log(y); // ReferenceError (block-scoped) console.log(z); // ReferenceError (block-scoped)
Conclusion
- Use const whenever possible for variables that do not need reassignment.
- Use let for variables that need to be reassigned within the same scope.
- Avoid var unless working with legacy code or requiring function-scoped behavior.
JavaScript Data Types
JavaScript has various data types classified into Primitive and Non-Primitive (Reference) types. Here's an explanation of each with examples and differences:
1. Primitive Data Types
Primitive types are immutable, meaning their values cannot be changed after they are created. They are stored directly in memory.
|
Example | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
String | "hello", 'world' | Represents a sequence of characters (text). Enclosed in single (''), double (""), or backticks (). | ||||||||||||||||||||||||
Number | 42, 3.14, NaN | Represents both integers and floating-point numbers. Includes NaN (Not-a-Number) and Infinity. | ||||||||||||||||||||||||
BigInt | 123n, 9007199254740991n | Used for numbers larger than Number.MAX_SAFE_INTEGER (2^53 - 1). Add n to create a BigInt. | ||||||||||||||||||||||||
Boolean | true, false | Represents logical values, used in conditions to represent "yes/no" or "on/off". | ||||||||||||||||||||||||
Undefined | undefined | Indicates a variable has been declared but not assigned a value. | ||||||||||||||||||||||||
Null | null | Represents an intentional absence of value. Often used to reset or clear a variable. | ||||||||||||||||||||||||
Symbol | Symbol('id') | Represents a unique identifier, mainly used as property keys for objects to avoid collisions. |
2. Non-Primitive (Reference) Data Types
Non-primitive types are mutable and stored by reference. They are used to store collections of data or more complex entities.
Data Type | Example | Description |
---|---|---|
Object | {name: 'John', age: 30} | A collection of key-value pairs. Keys are strings (or Symbols), and values can be any type. |
Array | [1, 2, 3, "apple"] | A list-like ordered collection of values. Access elements via index (e.g., array[0]). |
Function | function greet() {} | A reusable block of code that can be executed. Functions are first-class citizens in JavaScript. |
Date | new Date() | Represents date and time. Provides methods for manipulating dates and times. |
RegExp | /pattern/ | Represents regular expressions used for pattern matching and string searching. |
Map | new Map() | A collection of key-value pairs where keys can be of any type, unlike plain objects. |
Set | new Set([1, 2, 3]) | A collection of unique values, preventing duplicates. |
WeakMap | new WeakMap() | Similar to Map, but keys are weakly held, meaning they can be garbage-collected. |
WeakSet | new WeakSet() | Similar to Set, but holds objects weakly to prevent memory leaks. |
3. Key Differences Between Primitive and Non-Primitive Types
Aspect | Primitive Types | Non-Primitive Types |
---|---|---|
Mutability | Immutable: Values cannot be changed. | Mutable: Values can be modified. |
Storage | Stored directly in memory. | Stored as a reference to a memory location. |
Copy Behavior | Copied by value (creates a new value). | Copied by reference (points to the same object). |
Examples | string, number, boolean, etc. | object, array, function, etc. |
4. Special Cases
typeof Operator
- typeof null: Returns "object" due to a historical bug in JavaScript, but null is not an object.
- typeof NaN: Returns "number", even though it means "Not-a-Number."
- typeof function: Returns "function", which is a subtype of object.
Dynamic Typing
JavaScript allows variables to hold values of different types at runtime:
if (true) { var x = 10; let y = 20; const z = 30; } console.log(x); // 10 (accessible because of function scope) console.log(y); // ReferenceError (block-scoped) console.log(z); // ReferenceError (block-scoped)
5. Examples for Each Data Type
Primitive Types
// Re-declaration var a = 10; var a = 20; // Allowed let b = 30; // let b = 40; // SyntaxError: Identifier 'b' has already been declared const c = 50; // const c = 60; // SyntaxError: Identifier 'c' has already been declared // Re-assignment a = 15; // Allowed b = 35; // Allowed // c = 55; // TypeError: Assignment to constant variable
Non-Primitive Types
console.log(a); // undefined (hoisted) var a = 10; console.log(b); // ReferenceError (temporal dead zone) let b = 20; console.log(c); // ReferenceError (temporal dead zone) const c = 30;
6. Summary of typeof Results
|
Result |
||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
typeof "hello" | "string" | ||||||||||||||||||||||
typeof 42 | "number" | ||||||||||||||||||||||
typeof 123n | "bigint" | ||||||||||||||||||||||
typeof true | "boolean" | ||||||||||||||||||||||
typeof undefined | "undefined" | ||||||||||||||||||||||
typeof null | "object" | ||||||||||||||||||||||
typeof Symbol() | "symbol" | ||||||||||||||||||||||
typeof {} | "object" | ||||||||||||||||||||||
typeof [] | "object" | ||||||||||||||||||||||
typeof function(){} | "function" |
The above is the detailed content of Only Javascript cheatsheet you need !. For more information, please follow other related articles on the PHP Chinese website!

C and JavaScript achieve interoperability through WebAssembly. 1) C code is compiled into WebAssembly module and introduced into JavaScript environment to enhance computing power. 2) In game development, C handles physics engines and graphics rendering, and JavaScript is responsible for game logic and user interface.

JavaScript is widely used in websites, mobile applications, desktop applications and server-side programming. 1) In website development, JavaScript operates DOM together with HTML and CSS to achieve dynamic effects and supports frameworks such as jQuery and React. 2) Through ReactNative and Ionic, JavaScript is used to develop cross-platform mobile applications. 3) The Electron framework enables JavaScript to build desktop applications. 4) Node.js allows JavaScript to run on the server side and supports high concurrent requests.

Python is more suitable for data science and automation, while JavaScript is more suitable for front-end and full-stack development. 1. Python performs well in data science and machine learning, using libraries such as NumPy and Pandas for data processing and modeling. 2. Python is concise and efficient in automation and scripting. 3. JavaScript is indispensable in front-end development and is used to build dynamic web pages and single-page applications. 4. JavaScript plays a role in back-end development through Node.js and supports full-stack development.

C and C play a vital role in the JavaScript engine, mainly used to implement interpreters and JIT compilers. 1) C is used to parse JavaScript source code and generate an abstract syntax tree. 2) C is responsible for generating and executing bytecode. 3) C implements the JIT compiler, optimizes and compiles hot-spot code at runtime, and significantly improves the execution efficiency of JavaScript.

JavaScript's application in the real world includes front-end and back-end development. 1) Display front-end applications by building a TODO list application, involving DOM operations and event processing. 2) Build RESTfulAPI through Node.js and Express to demonstrate back-end applications.

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

Dreamweaver Mac version
Visual web development tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function