Add a blog post about JS scope.
This commit is contained in:
parent
fbc4db8da1
commit
03f03ff471
76
posts/scope-with-javascript.md
Normal file
76
posts/scope-with-javascript.md
Normal file
@ -0,0 +1,76 @@
|
||||
---
|
||||
title: JavaScript Scoping
|
||||
description: A blog post talking about how JavaScript handles scoping
|
||||
date: 2024-08-11
|
||||
tags:
|
||||
- development
|
||||
- javascript
|
||||
- typescript
|
||||
slug: javascript-scoping
|
||||
draft: true
|
||||
---
|
||||
|
||||
## The EventEmitter Class
|
||||
|
||||
The other day I was reading through the Types file of the MariaDB JavaScript
|
||||
library (since its the better MySQL library for Node.js), and I noticed that
|
||||
the `PoolConnection` class _actually_ extends the `EventEmitter` class from
|
||||
Node.js. That in and of itself isn't that exciting, but it had me thinking
|
||||
about the utility of extending that particular class, and how the scopeing of
|
||||
the code used in that class would actually work.
|
||||
|
||||
I never put a lot of thought into it, but if you have used the `EventEmitter`
|
||||
class in JavaScript at any point in your life, you know that you can attach
|
||||
callbacks to events that will be run when that particular event is emitted.
|
||||
|
||||
```javascript
|
||||
import EventEmitter from "node:events";
|
||||
|
||||
const em = new EventEmitter();
|
||||
em.on("home-event", function () {
|
||||
console.log("Something happened.");
|
||||
});
|
||||
|
||||
em.emit("some-event");
|
||||
```
|
||||
|
||||
When you call `em.emit("some-event")` anywhere this `EventEmitter` exists in
|
||||
code, you will get a console log from inside that function. Okay, makes sense,
|
||||
so what's interesting about this?
|
||||
|
||||
Well the scope of the callback function actually ineherits the called method's
|
||||
properties and methods. This can get really interesting if you are extending
|
||||
the functionality of the `EventEmitter` class - like in the MariaDB module's
|
||||
`PoolConnection` class.
|
||||
|
||||
## Getting In-Depth with Scope
|
||||
|
||||
So say we had a class that extends the `EventEmitter` class and had some
|
||||
methods with some state we cared about in the callback. In the MariaDB context
|
||||
that could be anything that has to do with the connection pool - like maybe
|
||||
how many open connections are available. We can sketch this out in a very
|
||||
trivial class example in TypeScript.
|
||||
|
||||
```typescript
|
||||
import EventEmitter from "node:events";
|
||||
|
||||
class SomePool extends EventEmitter {
|
||||
private freeConnections: number;
|
||||
|
||||
public constructor() {
|
||||
super();
|
||||
this.freeConnections = 4;
|
||||
}
|
||||
|
||||
public getFreeConnectionCount(): number {
|
||||
return this.freeConnections;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
So now, in any callback function* we can get the total number of free
|
||||
connections in the `SomePool` class.
|
||||
|
||||
```typescript
|
||||
title=
|
||||
```
|
Loading…
Reference in New Issue
Block a user