From 02c7cfc0c319301f9f728dd97afa4e6d4dc2c13c Mon Sep 17 00:00:00 2001 From: Dave Smith-Hayes Date: Mon, 18 Nov 2024 21:49:38 -0500 Subject: [PATCH] Add to the Scoping blog post. --- posts/scope-with-javascript.md | 44 ++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/posts/scope-with-javascript.md b/posts/scope-with-javascript.md index faf7bb9..480ade9 100644 --- a/posts/scope-with-javascript.md +++ b/posts/scope-with-javascript.md @@ -27,7 +27,7 @@ callbacks to events that will be run when that particular event is emitted. import EventEmitter from "node:events"; const em = new EventEmitter(); -em.on("home-event", function () { +em.on("some-event", function () { console.log("Something happened."); }); @@ -65,6 +65,14 @@ class SomePool extends EventEmitter { public getFreeConnectionCount(): number { return this.freeConnections; } + + public function getConnection() { + this.emit("pre-connect"); + + if (this.freeConnections) { + // get a connection + } + } } ``` @@ -72,5 +80,37 @@ So now, in any callback function* we can get the total number of free connections in the `SomePool` class. ```typescript -title= +const pool = new SomePool(); +pool.on("pre-connect", function () { + if (this.freeConnections) { + this.freeConnection = this.freeConnection - 1; + } +}); ``` + +This is a really impractical use of `EventEmitter`, but I think it does a good +job at illustrating the scope of the callback function on the `on` method and +how it can alter the state of the `SomePool` class. There is definitely a case +for when this can be super helpful and useful. + +## The Arrow Function + +One of the big things in JavaScript is to use this nifty little short-hand to +create a function: + +```typescript +[1, 2, 3].map((i) => i + 1); +``` + +This is super useful to keeping code clean and concise - but there is a huge +caveat using the arrow function over the classic function definition. When you +do an arrow function, you are not inheriting the scope of the object you are +attaching the callback to. + +So in the example above, the object is the Array object, implicitly +instantiated, and having its method `map` called (which iterates over each of +the items in an Array, and does something, in this case, adding 1 to it). + + + +