Functions, Conditionals and Loops
JavaScript Foundations
Day 2: Functions, Conditionals & Loops - Teaching JavaScript How to Think
Welcome to Day 2
Yesterday you learned how to store data in variables and perform basic calculations. But writing code line by line is limiting. Real programs need to make decisions, repeat tasks, and organize code into reusable blocks.
Today, you'll learn how to teach JavaScript to think. We'll cover functions (reusable code blocks), conditionals (making decisions), and loops (repeating actions). These are the tools that transform simple scripts into powerful programs.
What You'll Build Today
Functions that add numbers, check if they're even, and return results
Conditionals that determine Pass/Fail based on scores
Loops that count, calculate sums, and build sequences automatically
Functions: Reusable Code Blocks
Functions are like recipes. You write the instructions once, then use them whenever you need. They prevent repetition and make your code organized and maintainable.
Function Declaration
The traditional way to create a function using the function keyword.
// Function declaration
function greet() {
console.log("Hello, World!");
}
// Call the function
greet(); // Output: Hello, World!
greet(); // Output: Hello, World! (reusable!)
Visual Breakdown:
function greet() { ... }greet();Parameters and Arguments
Functions become powerful when they accept inputs. Parameters are placeholders; arguments are the actual values passed in.
// Function with parameters
function greetUser(name) {
console.log("Hello, " + name + "!");
}
// Calling with different arguments
greetUser("Alice"); // Output: Hello, Alice!
greetUser("Bob"); // Output: Hello, Bob!
// Multiple parameters
function add(a, b) {
console.log(a + b);
}
add(5, 3); // Output: 8
add(10, 20); // Output: 30
How It Works:
add(5, 3);console.log(5 + 3);Return Values
Functions can send data back using return. This makes them truly useful for calculations.
// Function that returns a value
function multiply(x, y) {
return x * y;
}
// Store the result
let result = multiply(4, 5);
console.log(result); // Output: 20
// Use directly in expressions
console.log(multiply(3, 7) + 10); // Output: 31
// Multiple returns (conditional)
function getMax(a, b) {
if (a > b) {
return a;
} else {
return b;
}
}
console.log(getMax(10, 5)); // Output: 10
console.log(getMax(3, 8)); // Output: 8
return immediately exits the function and sends the value back. Code after return won't run.
Arrow Functions (Modern Syntax)
A shorter, cleaner way to write functions. Perfect for simple operations.
// Traditional function
function square(x) {
return x * x;
}
// Arrow function (equivalent)
const square = (x) => {
return x * x;
};
// Even shorter (implicit return)
const square = x => x * x;
// More examples
const add = (a, b) => a + b;
const greet = name => `Hello, ${name}!`;
console.log(square(5)); // Output: 25
console.log(add(10, 20)); // Output: 30
console.log(greet("Alice")); // Output: Hello, Alice!
Arrow Function Rules:
x => x * 2
(a, b) => a + b
() => console.log("Hi")
Conditionals: Making Decisions
Conditionals let your code make choices. They check conditions and run different code based on whether those conditions are true or false.
if Statements
The simplest conditional. If the condition is true, run the code.
// Basic if statement
let age = 20;
if (age >= 18) {
console.log("You are an adult.");
}
// With variables
let temperature = 30;
if (temperature > 25) {
console.log("It's hot outside!");
}
Visual Flow:
age = 20if (age >= 18)
if...else Statements
Provide an alternative when the condition is false.
// if...else
let score = 45;
if (score >= 50) {
console.log("Pass");
} else {
console.log("Fail");
}
// Real-world example
let isLoggedIn = false;
if (isLoggedIn) {
console.log("Welcome back!");
} else {
console.log("Please log in.");
}
Decision Tree:
if...else if...else Chains
Check multiple conditions in order.
// Multiple conditions
let grade = 85;
if (grade >= 90) {
console.log("A");
} else if (grade >= 80) {
console.log("B");
} else if (grade >= 70) {
console.log("C");
} else if (grade >= 60) {
console.log("D");
} else {
console.log("F");
}
// Time-based greeting
let hour = 14; // 2 PM
if (hour < 12) {
console.log("Good morning!");
} else if (hour < 18) {
console.log("Good afternoon!");
} else {
console.log("Good evening!");
}
Comparison Operators in Conditionals
===Strict equal to!==Strict not equal to>Greater than<Less than>=Greater than or equal<=Less than or equal
// Combining conditions with && (AND) and || (OR)
let age = 25;
let hasLicense = true;
if (age >= 18 && hasLicense) {
console.log("Can drive");
}
if (age < 13 || age >= 65) {
console.log("Discount applies");
}
Loops: Repeating Code
Loops automate repetitive tasks. Instead of writing the same code 10 times, write it once and tell JavaScript to run it multiple times.
for Loops
The most common loop. Perfect when you know how many times to repeat.
// Basic for loop: print 1 to 5
for (let i = 1; i <= 5; i++) {
console.log(i);
}
// Output: 1, 2, 3, 4, 5
// Print 1 to 10
for (let i = 1; i <= 10; i++) {
console.log(i);
}
// Countdown
for (let i = 5; i > 0; i--) {
console.log(i);
}
// Output: 5, 4, 3, 2, 1
for Loop Anatomy:
for (let i = 1; i <= 5; i++)
let i = 1Start with i equal to 1
i <= 5Keep running while i is less than or equal to 5
i++Add 1 to i after each iteration
while Loops
Use when you don't know how many iterations you need – just keep going while a condition is true.
// Basic while loop
let count = 1;
while (count <= 5) {
console.log(count);
count++;
}
// User input simulation
let attempts = 3;
while (attempts > 0) {
console.log("Attempts remaining: " + attempts);
attempts--;
}
// Infinite loop prevention
let number = 0;
while (number < 100) {
number = number + 10;
console.log(number);
}
Loop Control: break and continue
// break: exit the loop early
for (let i = 1; i <= 10; i++) {
if (i === 5) {
break; // Stop at 5
}
console.log(i);
}
// Output: 1, 2, 3, 4
// continue: skip to next iteration
for (let i = 1; i <= 5; i++) {
if (i === 3) {
continue; // Skip 3
}
console.log(i);
}
// Output: 1, 2, 4, 5
Practical Loop Patterns
// Sum all numbers from 1 to 10
let sum = 0;
for (let i = 1; i <= 10; i++) {
sum = sum + i;
}
console.log(sum); // Output: 55
// Multiplication table
for (let i = 1; i <= 5; i++) {
console.log("5 x " + i + " = " + (5 * i));
}
// Even numbers only
for (let i = 2; i <= 10; i += 2) {
console.log(i);
}
// Output: 2, 4, 6, 8, 10
Practical Examples
Let's combine everything you've learned into practical, reusable code.
Example 1: Add Two Numbers Function
// Function to add two numbers
function addNumbers(a, b) {
return a + b;
}
// Test the function
console.log(addNumbers(5, 3)); // Output: 8
console.log(addNumbers(10, 20)); // Output: 30
console.log(addNumbers(-5, 5)); // Output: 0
// Arrow function version
const add = (a, b) => a + b;
Example 2: Check if Number is Even
// Check if number is even
function isEven(number) {
return number % 2 === 0;
}
// Test the function
console.log(isEven(4)); // Output: true
console.log(isEven(7)); // Output: false
console.log(isEven(0)); // Output: true
console.log(isEven(13)); // Output: false
// Using in a conditional
let num = 24;
if (isEven(num)) {
console.log(num + " is even");
} else {
console.log(num + " is odd");
}
How It Works:
4 % 2 = 0 (even)7 % 2 = 1 (odd)
Example 3: Print Numbers 1–10
// Using for loop
function printOneToTen() {
for (let i = 1; i <= 10; i++) {
console.log(i);
}
}
printOneToTen();
// Using while loop
function printOneToTenWhile() {
let i = 1;
while (i <= 10) {
console.log(i);
i++;
}
}
Mini Challenge: Pass/Fail Checker
// Check if score is passing (>= 50)
function checkPass(score) {
if (score >= 50) {
return "Pass";
} else {
return "Fail";
}
}
// Or shorter with ternary operator
const checkPass = score => score >= 50 ? "Pass" : "Fail";
// Test cases
console.log(checkPass(75)); // Output: Pass
console.log(checkPass(50)); // Output: Pass
console.log(checkPass(49)); // Output: Fail
console.log(checkPass(30)); // Output: Fail
Challenge Extension:
// Extended version with letter grades
function getGrade(score) {
if (score >= 90) return "A";
if (score >= 80) return "B";
if (score >= 70) return "C";
if (score >= 60) return "D";
return "F";
}
Practical Exercises: Build Your Skills
Create a file called day2-practice.js and complete these exercises.
Exercise 1: Calculator Functions
Task: Create functions for basic math operations.
// Exercise 1: Calculator Functions
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
function multiply(a, b) {
return a * b;
}
function divide(a, b) {
if (b === 0) {
return "Cannot divide by zero";
}
return a / b;
}
// Test your functions
console.log("10 + 5 =", add(10, 5));
console.log("10 - 5 =", subtract(10, 5));
console.log("10 * 5 =", multiply(10, 5));
console.log("10 / 5 =", divide(10, 5));
console.log("10 / 0 =", divide(10, 0));
Expected Output:
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2
10 / 0 = Cannot divide by zero
Exercise 2: Number Analyzer
Task: Create a function that analyzes a number and returns information about it.
// Exercise 2: Number Analyzer
function analyzeNumber(num) {
let result = "Number: " + num + "\n";
// Check if even or odd
if (num % 2 === 0) {
result += "Type: Even\n";
} else {
result += "Type: Odd\n";
}
// Check if positive, negative, or zero
if (num > 0) {
result += "Sign: Positive";
} else if (num < 0) {
result += "Sign: Negative";
} else {
result += "Sign: Zero";
}
return result;
}
console.log(analyzeNumber(7));
console.log("---");
console.log(analyzeNumber(-4));
console.log("---");
console.log(analyzeNumber(0));
Expected Output:
Type: Odd
Sign: Positive
---
Number: -4
Type: Even
Sign: Negative
---
Number: 0
Type: Even
Sign: Zero
Exercise 3: FizzBuzz Classic
Task: Print numbers 1–20, but print "Fizz" for multiples of 3, "Buzz" for multiples of 5, and "FizzBuzz" for both.
// Exercise 3: FizzBuzz
for (let i = 1; i <= 20; i++) {
if (i % 3 === 0 && i % 5 === 0) {
console.log("FizzBuzz");
} else if (i % 3 === 0) {
console.log("Fizz");
} else if (i % 5 === 0) {
console.log("Buzz");
} else {
console.log(i);
}
}
Expected Output:
Exercise 4: Sum of Range
Task: Create a function that calculates the sum of all numbers from 1 to n.
// Exercise 4: Sum of Range
function sumToN(n) {
let sum = 0;
for (let i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
// Test
console.log("Sum to 5:", sumToN(5)); // 15 (1+2+3+4+5)
console.log("Sum to 10:", sumToN(10)); // 55
console.log("Sum to 100:", sumToN(100)); // 5050
Exercise 5: Password Validator
Task: Check if a password meets criteria (at least 8 characters).
// Exercise 5: Password Validator
function validatePassword(password) {
if (password.length >= 8) {
return "Password accepted";
} else {
return "Password must be at least 8 characters";
}
}
// Test
console.log(validatePassword("hello123")); // Accepted
console.log(validatePassword("hi")); // Too short
console.log(validatePassword("mypassword")); // Accepted
Complete Practice File
// ===================================
// JavaScript Day 2: Practice Exercises
// ===================================
console.log("=== Exercise 1: Calculator ===");
function add(a, b) { return a + b; }
function subtract(a, b) { return a - b; }
function multiply(a, b) { return a * b; }
function divide(a, b) {
return b === 0 ? "Cannot divide by zero" : a / b;
}
console.log("10 + 5 =", add(10, 5));
console.log("10 / 0 =", divide(10, 0));
console.log("");
console.log("=== Exercise 2: Number Analyzer ===");
function analyzeNumber(num) {
let type = num % 2 === 0 ? "Even" : "Odd";
let sign = num > 0 ? "Positive" : num < 0 ? "Negative" : "Zero";
return `Number: ${num}, Type: ${type}, Sign: ${sign}`;
}
console.log(analyzeNumber(7));
console.log(analyzeNumber(-4));
console.log("");
console.log("=== Exercise 3: FizzBuzz ===");
for (let i = 1; i <= 20; i++) {
if (i % 15 === 0) console.log("FizzBuzz");
else if (i % 3 === 0) console.log("Fizz");
else if (i % 5 === 0) console.log("Buzz");
else console.log(i);
}
console.log("");
console.log("=== Exercise 4: Sum to N ===");
function sumToN(n) {
let sum = 0;
for (let i = 1; i <= n; i++) sum += i;
return sum;
}
console.log("Sum to 10:", sumToN(10));
console.log("");
console.log("=== Exercise 5: Password Validator ===");
const validatePassword = pwd =>
pwd.length >= 8 ? "Password accepted" : "Password too short";
console.log(validatePassword("hello123"));
console.log(validatePassword("hi"));
console.log("");
console.log("=== Bonus: Grade Checker ===");
const checkGrade = score => {
if (score >= 90) return "A";
if (score >= 80) return "B";
if (score >= 70) return "C";
if (score >= 60) return "D";
return "F";
};
console.log("Score 85:", checkGrade(85));
console.log("Score 45:", checkGrade(45));
Testing Your Code
Complete this lesson
Mark as complete to track your progress