So how it works in theory?
First, when you hit save button, there is conversion between RGB to YCrCb color system. If you implement this badly, here is your first step of data loss. There are practical reasons why this conversion is needed but it not crucial here. After this conversion, from every pixel value is subtracted value of 128 to create zero-mean image.
After conversion RGB to YCrCb is finished, you image is divided in blocks of 8x8 pixels, which are called blocks, or MCU (minimal coded unit).
After your image is divided in 8x8 blocks, then Forward Descreete Cosine Transform is executed on every 8x8 block. Formula of FDCT is given bellow:
where M and N are dimensions of the 8x8 block, in our example M=N=8, and C(u), C(v) are constants which is given in picture bellow:
F(u,v) is result of FDCT, which is also matrix/block 8x8 pixels, and F(u,v) elements are called FDCT coefficients, and they are frequency representation of the picture. First element F(0,0) is called DC coefficient, and others are called AC elemts. First element is most important because it hold most of data of 8x8 block. If we do some math we can get that first element F(0,0) is mean value of all other nodes, multiplied by 8 which is described in formulas bellow.
and you get
Enough of mathematics :).
If you are following me, then you see that we didn't loose so much data until now (we can still run IDCT (I-inverse) and we will get our starting image with some losses). So where is the process, what is changing when you are setting your Photoshop/Lightroom quality size when you are saving .jpeg image? Let's continue.
So lets say we have image 16x16 pixels. When we divide our image to 8x8 blocks, we get two 8x8 blocks. After we do color conversion, we get to FDCT. We run FDCT on first 8x8 block, and as resoult get new 8x8 block, which is product of FDCT. Then we run FDCT on second 8x8 block of original image, and as result, we get another 8x8 block of FDCT. So altogether, result of FDCT on our 16x16 picture/matrix is new 16x16 matrix and lets call it F matrix.
Now F matrix is divided in 8x8 blocks, and it is divided with quantisation table which is matrix of 8x8 pixels. Quantisation table values are constants/numbers which are given by experimental results on human eye. Classical quantization table is given bellow.
This matrix which is called Q matrix, is divided with our F matrix, actually first 8x8 block of F matrix, then with second 8x8 block of F matrix, and so on. Why? To get smaller numbers, for which we need fewer bits to represent them in digital file. If you have value 105, you need 8 bits for digital representation. But if you devide 105 with 52, then you get 1,90. You take only integer part, which is 1.00. Representing decimal number 1 you need one bit only, so you saved 7 bits. Now imagine savings for picture with 4000x4000 pixels :).
This process of dividing F table with Q table is spot where jpeg loss is happening. If Q elements are bigger, loss is bigger and vice versa.
So when you changing Photoshop spinner from bad to great quality, actually you are changing values of Q table.
Also, you see that first element of Q matrix, Q(0,0) is smallest one. It is because this element will bi divided with F(0,0) element, which is DC element (element which holds most of data), and if we divide it with big number, you will see 8x8 blocks in your image, as you can see it in pictures posted by @mattdm.
Your answer is yes it is :)
I hope I helped you :)