---
# System prepended metadata

title: 2011-GHP-RM-WEB-FT Morning Review Notes

---

# 2011-GHP-RM-WEB-FT Morning Review Notes

## Exit Ticket Solutions

### In your own words, what is Node? And why do we need it?

Node is a runtime environment that has the ability to run a V8 engine on environments other than the browser (e.g. operating systems, servers, etc.)

### What does module.exports do?

It's an object that tells Node which pieces of code to export from a given file so other files are allowed to access the exported code.

### Which of the following is not a built-in Node module?

- fs
- http
- path
- **curl** ☑️

### What is the order of output of this snippet of code:

```javascript
console.log('Hellow')
setTimeout(() => { console.log('a new') }, 5000)
console.log('World') 
```

1. Hellow
2. World
3. a new

### What is the output of the following snippet of code:

```javascript
for (var x = 0; x < 3; x++) {
  setTimeout(() => console.log(x), 100);
}
```

3, 3, 3

#### TL;DR Reason for This:

Variables declared with `var` only get given space (memory) once. In addition, it is beholden to its execution context (either global or function) so, in this case, global. `setTimeout` with the `console.log` creates a closure around the variable x, which has already run until the end, which x is 3. 

#### Images from this morning that go into more detail

![](https://i.imgur.com/V3uk9wL.png)
![](https://i.imgur.com/Lf1rmKK.png)


1. Hoisting Code Demo

`var` example:

```javascript=
console.log(x) // returns undefined

var x = 5 
```

`let` demo:
```javascript=
console.log(x) // error

let x = 5 
```

2. Closure Code Demo

```javascript
function outer() {
    let counter = 0
    function increment() {
        return counter += 1
    }
    return increment
}

let newInstance = outer()

console.log(newInstance()) // 1
console.log(newInstance()) // 2
```

[Resource for `var` vs `let`](https://exploringjs.com/es6/ch_variables.html#sec_let-const-loop-heads)

## Unaddressed Questions From Exit Ticket

### Should node_modules always be in .gitignore, or do we have to push them to a repo initially?

### Answer

Yes! This is standard practice because `node_modules` have ALL the dependencies of our dependencies. Open it up and check how many directories it has when you just install one module/package like `Express`

That's why we can just rely on the `package.json` because once we run `npm install`, it will look through our dependencies in the `package.json` and install everything locally into `node_modules`. So, we don't need to push up `node_modules` to GitHub

### Can you go over the cat portion of our workshop?

### Answer

The idea of cat was to be able to read a file as an argument to cat (i.e., `cat bash.js`) and log out its contents to our terminal screen. We will use Node's `fs` built in module, more specifically, the method off it called `readFile`, which takes in a file to be read, encoding (use utf8) and a callback function

```javascript=
module.exports = (fileName, done) => {
  fs.readFile(fileName, 'utf8', (err, data) => {
    if (err) {
      done(err.stack)
    } else {
      done(data)
    }
  })
}

```

Side Note: If you don't indicate the encoding, it will just log out numbers. Every character has its own number assigned to it. 


## Examples I Couldn't Get To

[Event Loop Visualizer](http://latentflip.com/loupe/)

Draw the Call Stack

```javascript=
const hello = () => {
    awesome()
    console.log('hello')
}

const awesome = () => {
    console.log('coolio')
    food()
}

const food = () => {
    console.log('pbj')
    console.log('waffles')
}

hello()
```
![](https://i.imgur.com/c3QsstL.png)
![](https://i.imgur.com/YuamacB.png)


Now, let's add some async code to it: Please note that I didn't draw the event loop and queue in every step for brevity

```javascript=
const hello = () => {
    awesome()
    console.log('hello')
}

const awesome = () => {
    console.log('coolio')
    food()
    setTimeout(() => {
        console.log('I want a cookie!')
    }, 3000)
    console.log('awesome')
}

const food = () => {
    console.log('pbj')
    console.log('waffles')
}

hello()
```

![](https://i.imgur.com/vmPUddt.png)
![](https://i.imgur.com/NMYxBOI.png)
