# JavaScript: From Fundamentals to Functional JS, v2

This course has been updated! We now recommend you take the JavaScript: From First Steps to Professional course.

Table of Contents

## JavaScript: From Fundamentals to Functional JS

### Course Introduction

Bianca Gandolfo introduces herself and gives an overview of the course, "JavaScript: From Fundamentals to Functional JS."### Success Tips for Learning

Bianca reviews her tips for success in learning and developing new skills.### Functional Programming

Bianca introduces functional programming and how it compares to object-oriented programming. Brianca takes a question from a student about the tenets of functional programming.

## Objects

### Property Access

Bianca illustrates that objects are data structures that contain related properties of an entity. Properties can be assigned and accessed using dot notation. Bianca creates a basic object with a few properties to demonstrate syntax.### Arrays

Like objects, Bianca shows that arrays are a data structure. Fundamentally, arrays are an object. However, they are commonly used for ordered data like lists.### Bracket Notation

Bracket notation can also be used to create properties. Functionally, bracket notation is the same as dot notation. However, the syntax looks entirely different. Both notations are interchangeable.### Non-Valid Characters

Bianca talks what characters are invalid when using objects and the rules around naming object properties.### Game Characters Challenge

In this challenge, students create an object using both bracket and dot notation that represents characters found in a popular board game.### Game Characters Solution

Bianca walks through the solution with the help of students.### Object Review

While reviewing the objects, Bianca examines when to use dot notation vs. brackets.### ES6 Destructuring

Bianca introduces destructing, a simplified method to extract multiple properties from an object.### Destructuring Challenge

In this challenge, students use destructuring to pull out two properties from an object.### Destructuring Solution

Bianca walks through the destructuring solution.### Destructuring Examples

Bianca demonstrates examples of destructuring that include omitting a value, combine with spread or rest operator, swapping out variables, and more.

## List Transformations

### List Transformations

Bianca introduces list transformations, which is to take a list or collection of data and extract specific portions of that data by looping or other logic. Using this functional utility is useful when dealing with APIs.### Looping Exercise

In this exercise, students loop through an array.### Looping Solution

Bianca walks through the solution with the help of students.### Looping Exercise, Part 2

Building on the previous exercise, students loop through an array marking a specific value.### Looping Solution, Part 2

Bianca walks through the solution with the help of students. Bianca takes questions from students.### Looping Exercise, Part 3

In this exercise, students destructure nested data structure into two variables.### Looping Solution, Part 3

Bianca walks through the solution with the help of students. Bianca takes questions from students.

## .forEach() Function

### Using Functions

Bianca introduces list transformations with functions showing how to convert data into a class.### forEach Function

Bianca demonstrates how to use native forEach in modern browsers and _.each from underscore to loop through a list and their respective differences.### forEach and _.each Exercises

In this exercise, loop through a list using each function. Then students implement _.each function.### forEach and _.each Solution

Bianca walks through the solution with the help of students. Bianca takes questions from students.

## .map() Function

### _.map() vs .map() Functions

Bianca introduces map functions, which produces a new array of values by mapping each value in a list through a transformation function.### _.map() Exercise

In this exercise, students take a list of weapons and make them "broken" by mapping over them.### _.map() Solution

Bianca walks through the solution with the help of students. Bianca takes questions from students.### _map() vs. _each()

Bianca compares _map() and _each() functions.### _.map() Exercise, Part 2

In this exercise, students implement _.map() function.### _.map() Solution, Part 2

Bianca walks through the solution with the help of students. Bianca takes questions from students.

## .filter() Function

### .filter() Exercise

In this exercise, students write a filter function to looks through each value in a list.### .filter() Solution

Bianca walks through the solution with the help of students of creating a filter function and Bianca takes questions from students.### .filter() Application Exercise

In this challenge, students use the newly created filter function and loop through a dataset to display only the desired data.### .filter() Application Solution

Bianca walks through the solution with the help of students and takes questions from students. Bianca takes a question regarding using curly brackets with one or two statements on one line.

## Functions In-Depth

### Anatomy of a Function

After discussing opinions about JavaScript with students, Bianca introduces an examination on functions. Bianca overviews the function definition, parameters, body and how the function is invoked or called.### Function Scavenger Exercise

In this exercise, students determine each part of a function.### Function Scavenger Solution

Bianca walks through the solution with the help of students and takes questions from students.### ES6 Arrow Functions

Bianca reviews arrow functions, which are a concise syntax for writing function expressions. Bianca takes questions from students.### Projecting Exercise

n this exercise, students filter and then map a dataset to find desired values.### Projecting Solution

Bianca walks through the solution with the help of students and takes questions from students.### Spread Operator

After a quick review, Bianca demonstrates the spread operator, which fills function arguments into an array.### Arguments Keyword

Bianca reviews arguments keyword, which is an object that references all the arguments from a function as a pseudo-array.### Default Parameters

Bianca discusses default parameters, which are default values when an argument is either omitted or undefined.### ES5 Rewrite Exercise

In this exercise, students rewrite JavaScript into ES5 JavaScript.### ES5 Rewrite Solution

Bianca walks through the solution to ES5 Rewrite Exercise.### Array-Like Object

Bianca shows how to convert an array-like object into an array by referencing the slice method of arrays.### Array.from

Bianca introduces the ES6 Array.from() method, which creates a new array instance from an array-like object.### _.from() Exercise

In this exercise, students implement _.from() function. Bianca takes questions from students.### _.from() Solution

After quickly walking through the solution, Bianca reminds students that functions are also objects.

## Scope

### Scope Walkthrough Setup

With an interactive exercise with students, Bianca will start a series of tests about scope, which determines the accessibility of variables.### Scope Walkthrough, Part 1

With the aid of students, Bianca walks through a series of tests about the nature of scope.### Scope Walkthrough, Part 2

Continuing scope exercises with students, Bianca reviews the questions about scope including local scope's availability outside of a function; when an inner and outer variable have the same name; what happens to scope if a function gets called repeatedly, and more. Bianca takes questions from students.### Scope Walkthrough, Part 3

Finishing up the scope exercises with students, Bianca examines scope: inner function accesses both inner and outer variables and retaining access to variables from the outer and inner scope. Bianca takes questions from students.### Scope Takeaways

Bianca reviews with students the big takeaways from the scope walkthroughs.

## Callbacks

### Higher-Order Functions & Callbacks

Bianca uses a few code examples to illustrate why higher-order functions are useful in functional programming. Higher-order functions either take a function as an argument or return a function as output.### Passing Arguments

Bianca demonstrates how functions passed as arguments can be invoked using their parameter name. These function may also have their own set of arguments passed to them when they are invoked.### Translate into ES6 Exercise

In this exercise, translate JavaScript into ES6.### Translate into ES6 Solution

Bianca walks through the solution to Translate into ES6 Exercise.### Passing Arguments, Part 2

Bianca discusses how to pass a function with arguments to another function.### _.reduce() Exercise

In this exercise, students can pick one of two assignments: implement _.reduce() functions.### _.reduce() Solution

Bianca walks through the solution to implement _.reduce() function.### Empty Room Exercise

In this exercise, students determine their method to pull out a unique value from a pre-made dataset.### Empty Room Solution

Bianca walks through a possible solution to Empty Room Exercise. Bianca takes questions from students.

## Functional Utilities

### Currying

Bianca introduces currying and composing. Currying is a process of using a function to gather arguments before passing them to another function.### Composing

Bianca reviews composing, which is when each function consumes the return value of the function that follows.

## Advanced Scope: Closure

### Closure

Bianca reviews examples of closure which occurs when one function returns another function, and the returning function retains access the scope.### Closure, Part 2

Bianca adds a setTImeout() method to the function, demonstrating that even a delay, the nested function still has access to the parent function�۪s scope.### Creating Closure

Bianca shows how to create closure by calling a function and saving the returned function as a variable. Bianca then uses this variable to invoke the function call to demonstrate it still has access to the original scope.### Closure Demonstration

Bianca demonstrates closure and shows ES6 equivalent. Bianca takes questions from students.### Closure Recipe

Bianca reviews the construction and execution of closure.### Currying and Composing Exercises

In these exercises, students work on implementing currying and compose functions.