When I started this project I was having a bit of trouble with classes vs factory functions, modules, and inheritance. I took a hiatus from study and came back to it a month or so later and to my dismay found I had absolutely no idea what I was doing AT ALL. It was like I completely forgot all programming knowledge, and didn't know where to begin. I felt I was in dire straights.
In the end, it all came back more or less, and I was off to the races. Funny how that happens.
The goal of this was to incorporate factory functions and modules as a form of encapsulation and privatization/separation of variables and methods, for readability, maintainability, structure, and privacy/security.
I feel this turned out very well as I learned about IIFE's and implemented what I feel is an excellent (for my level) structure to the code, breaking it up into sub-modules like "Gameboard" and "Display Control".
Creating an AI was easier than it sounded at first, although, there are some non-crucial aspects of this which I could improve upon (currently, if Player 2 is named "CPU", the CPU moves will trigger, for example).
I also took care to make sure it was fully responsive and single-page for mobile.
My next goals are to implement a harder CPU or several different types (currently I use a 'random space' method). I have ideas on how to do this, I just haven't done it yet.