JavaScript Basics: Weekly Review and Explanation Checkpoint
March 25, 2026
In today’s article, I wanted to do something different from the earlier daily lessons.
Instead of focusing on a brand new JavaScript topic, I used this session as a weekly review and explanation checkpoint. The goal was to look back at everything I studied in the first week, identify what I could already explain well, and be honest about what still needed repetition.
That honesty matters.
A review day is not just about proving what I know. It is about exposing weak spots before they become bigger problems later. I want to be able to look back on posts like this in a few months and see not only what I learned, but also where I was still confused and how I worked through it.
This week covered a lot of important JavaScript foundations:
- primitive values vs reference values
- scope, hoisting, and the Temporal Dead Zone
- truthy/falsy values and equality
- functions, arrow functions, lexical scope, and
this - array and object methods
- a deeper drill session with
reduceandsort
For this review session, I tried to rewrite several exercises from memory. Some of them went well. Some of them reminded me that I still need more reps.
That is exactly what a good review session should do.
How I Think a Weekly Review Should Work
If I were teaching someone how to review the first week of JavaScript fundamentals, I would suggest this approach:
- pick a few core topics from memory
- rewrite examples without looking at old notes
- explain what the code is doing out loud
- check where the mental model breaks down
- fix the examples and make them easier to read
The point is not to read the material again passively.
The point is to ask:
Can I still write and explain this without help?
If the answer is no, that is not failure. That is the exact spot where review is working.
The 10 JavaScript Ideas I Want Automatic Recall On
After the first six days, these are the JavaScript ideas I most want to know without hesitation:
- Primitives are copied by value, while objects and arrays are handled through references.
- Spread syntax only creates a shallow copy.
letandconstare block-scoped, whilevaris function-scoped.var,let, andconstare all hoisted, but they behave differently.===is safer than==because it avoids coercion.??is often better than||when I want to preserve valid falsy values like0andfalse.- Arrow functions do not create their own
this. - Lexical scope means variables are resolved based on where code is written.
map,filter,find,some,every, andreduceeach have a different purpose.mapis for transformation, whileforEachis usually for side effects.
That is a strong list for a first week, and it gives me a clear target for what I want automatic recall on.
What I Rewrote Correctly
Some of the review exercises went well, which was encouraging.
One area that felt solid was primitive values vs references.
let count = 5;
let copiedCount = count;
copiedCount += 6;
console.log(count); // 5
console.log(copiedCount); // 11
const ref = { foo: "bar", face: "happy" };
const ref2 = ref;
ref2.face = "sad";
console.log(ref.face); // "sad"
This still feels like one of the most important JavaScript fundamentals to understand. Primitive values are copied independently, while object variables can end up pointing to the same underlying object.
I also felt reasonably good about scope and the Temporal Dead Zone:
if (true) {
var hi = "hello";
}
console.log(hi); // "hello"
if (true) {
let bye = "bye";
}
// console.log(bye); // ReferenceError
// console.log(error1); // ReferenceError
let error1 = "no";
This review reminded me that I do understand the basic difference:
varescapes the blockletdoes not- accessing
letbefore declaration triggers a TDZ error
That part is starting to feel more stable.
Where I Still Needed More Practice
The review also made it obvious where I still needed more repetition.
The biggest weak spots were:
- writing a clean normalizer function with
??and|| - showing
thiscorrectly with arrow functions - remembering the simplest and clearest syntax for array methods like
map,filter,find,some, andevery
That was actually helpful to discover.
It would have been easy to assume I understood these topics because I had read and discussed them recently. But writing them from memory showed me exactly where the concepts still felt fragile.
That is why I think review days are so valuable.
Fixing My ?? and || Normalizer Example
In one of my review exercises, I wanted to write a normalizer function that:
- turns
nullandundefinedinto a fallback - preserves
0 - preserves
false
My first attempt was not very clear:
function normit(thing) {
return thing ?? (thing || 0);
}
The reason this was not a great solution is that it mixed ?? and || in a way that made the intent harder to understand.
The cleaner solution is simply:
function normalize(value) {
return value ?? "fallback";
}
This works because ?? only falls back when the value is null or undefined.
So:
console.log(normalize(null)); // "fallback"
console.log(normalize(undefined)); // "fallback"
console.log(normalize(0)); // 0
console.log(normalize(false)); // false
console.log(normalize("")); // ""
That is exactly what I wanted.
This was a good reminder that when I know the goal clearly, the simplest solution is often the best one.
The real mental model I want to remember is:
||falls back for any falsy value??falls back only fornullorundefined
That is one I still want more reps with.
Fixing My Arrow Function and this Example
Another area where I knew I needed more practice was this.
I wrote an object like this:
let myObj = {
sayHi: function () {
console.log("HI");
},
sayBye: () => {
console.log("Bye");
},
};
That technically showed a regular function and an arrow function, but it did not really show the important part of the lesson, which is how this behaves differently.
A better review example is this:
const myObj = {
name: "Chris",
sayHi: function () {
console.log("Hi,", this.name);
const later = () => {
console.log("Still hi,", this.name);
};
later();
},
};
myObj.sayHi();
This works because:
sayHiis a regular method- inside
sayHi,thisrefers tomyObj lateris an arrow function- the arrow function inherits the surrounding
this
That means both logs use "Chris".
The broken version looks like this:
const brokenObj = {
name: "Chris",
sayBye: () => {
console.log("Bye,", this.name);
},
};
brokenObj.sayBye(); // usually undefined
This fails because the arrow function does not get method-style this.
That was one of the clearest review corrections for me.
The rule I want to keep is:
- use regular methods for object behavior
- use arrow functions for nested callbacks
Fixing My Array Method Examples
Array methods were another area where I could feel that I understood the ideas better than I remembered the syntax.
That is normal, but it also means I need more repetition.
My original review attempts for map, filter, and find were too complicated or incorrect for what I was trying to demonstrate. A better review is to go back to the clearest possible examples.
Here is the version I want to remember.
const nums = [1, 3, 55, 33, 10];
const mapped = nums.map((n) => n * 2);
console.log(mapped); // [2, 6, 110, 66, 20]
const filtered = nums.filter((n) => n > 10);
console.log(filtered); // [55, 33]
const found = nums.find((n) => n === 10);
console.log(found); // 10
const hasEven = nums.some((n) => n % 2 === 0);
console.log(hasEven); // true
const allPositive = nums.every((n) => n > 0);
console.log(allPositive); // true
This review helped me simplify the mental models again:
maptransforms each itemfilterkeeps matching itemsfindgets the first matching itemsomechecks if at least one item matcheseverychecks if all items match
That is the level of clarity I want before I try to write more complex examples.
Why Simpler Examples Are Better During Review
One thing I learned from this checkpoint is that review is not the time to show off.
Review is the time to make the concept as simple and as clear as possible.
If my map example is so complicated that I cannot explain it cleanly, then it is not helping me review the purpose of map.
If my this example does not actually use this.name, then it is not reinforcing the real lesson.
Simple examples are not a sign of weakness. They are usually a sign that I am trying to understand the concept cleanly.
That is something I want to remember when I keep reviewing in future weeks.
How I Would Teach Scope, Equality, and Array Methods to a Junior Developer
One of the explanation prompts for today was to teach JavaScript scope, equality, and array methods in a short, simple way.
If I were explaining it to a junior developer, I would say this:
JavaScript scope is about where variables can be accessed. Variables declared with let and const are block-scoped, which means they stay inside the block where they are declared. var is function-scoped, which is one reason it can be easier to misuse.
For equality, I usually prefer === because it checks both value and type and avoids confusing coercion rules. == can do automatic type conversion, which is why expressions like false == 0 end up being true.
For array methods, I think in terms of intent. map transforms each item and returns a new array. filter keeps matching items. find returns the first matching item. some checks whether at least one item matches. every checks whether all items match. reduce combines many items into one final result.
That is the kind of explanation I want to be able to give naturally, without sounding memorized.
What I Want to Keep Practicing After This Review
If I were turning this review into a practical next-step list, it would be this:
- write 5 tiny normalizer examples using
??and|| - write 3
thisexamples from memory:- regular method
- arrow inside regular method
- arrow as method
- rewrite the five main array methods using the simplest possible examples
That would strengthen the exact areas where I felt shaky this week.
And honestly, that is encouraging.
It means I do not need “more JavaScript” in a vague way. I need more repetition on specific patterns.
That is a much better place to be.
The Obstacle is the way.
Why This Matters in Angular Later
Everything I reviewed this week feeds directly into Angular development.
Understanding references and shallow copies helps with state updates and change detection.
Scope, lexical scope, and this affect callbacks, subscriptions, and event handling.
Equality and fallback logic matter in templates, forms, and API handling.
Array methods matter constantly when transforming data for display.
So even though this was a “JavaScript review day,” it still feels very relevant to my Angular goal.
Final Takeaway
My biggest takeaway from this weekly review is that review works best when it is honest.
The goal is not to prove I already know everything. The goal is to find the exact places where my understanding is still weak and then strengthen them deliberately.
This week showed me that I am starting to build a solid foundation, but it also reminded me where I still need more reps:
??vs||- arrow functions and
this - clean recall of array method syntax
That is valuable information.
If I keep documenting both what clicked and what was still hard, I think these posts will become a really useful record of how my understanding grows over time.
