Count numbers of Objects and Array contained into a main Object

I have an Object that contains various values, Objects, and Arrays, as shown in the snippet.

I am looking for a function that can count the total number of Objects and Arrays within this Object.

Currently, I am able to iterate through this main Object and log the Objects and Arrays with appropriate indentation. So, I can visualize the structure of this main Object later on; you don’t need to worry about that.

What I really want to understand is how my function works, specifically one particular line of code that I wrote. This line was suggested to me as a trick instead of simply calling the function again.

I will provide you with the Object and function in the snippet below, and I will indicate the part that I don’t fully comprehend afterwards.

        let datas = {
            name:"Main datas list",
            content:"List of Students and teachers",
            students:[
                {
                    name:"John",
                    age:23,
                    courses:["Mathematics","Computer sciences","Statistics"]
                },
                {
                    name:"William",
                    age:22,
                    courses:["Mathematics","Computer sciences","Statistics","Algorithms"]
                }
            ],
            teachers:[
                {
                    name:"Terry",
                    courses:["Mathematics","Physics"],
                }
            ]
        }

        function countAndDisplay(obj, indent = "") {
            let count = 0;

            for (let key in obj) {
                if (typeof obj[key] !== "object") {
                    console.log(`${indent}${key} : ${obj[key]}`);
                }

                if (typeof obj[key] === "object") {
                    if (Array.isArray(obj[key])) {
                        console.log(`${indent}Array : ${key} contains ${obj[key].length} element(s)`);
                    } else if (!Array.isArray(obj[key])) {
                        console.log(`${indent}Object : ${key} contains ${Object.keys(obj[key]).length} element(s)`);
                    }

                    count++; // Increment the count for each object or array encountered
                    
                    // Recursively count and display sub-elements

                    count += countAndDisplay(obj[key], indent + "  ");
                    
                    console.log(`${indent}=> DEBUG TEST COUNT VALUE = ${count}`); // just to understand how the itertion counts the elements
                }
            }

            return count;
        }

        let totalCount = countAndDisplay(datas);
        console.log(`datas contains ${totalCount} Objects or Arrays`);

Could you please explain the purpose and behavior of the code snippet here?

count++;
This line increments the value of the variable ‘count’ by 1 each time it is executed. I understand this part.

The next line is unclear to me.
count += the same function();
Specifically, I’m having trouble understanding how ‘count += the same function()’ can assign a value to the count variable immediately after it was incremented.

I don’t understand why the count variable is incremented (as if assigning a value to it), and then on the next line, count += is used with the recursive function (which seems to assign another value to the variable after the increment).

When I call the function, I know that it will execute all of its code again, including the line where I increment the count variable. However, the syntax is not easy to comprehend because if I simply call the function like countAndDisplay(obj[key], indent + " "); in place of count += countAndDisplay(obj[key], indent + " ");, it doesn’t work at all and doesn’t produce the expected result.

Could someone help me understand the logic behind this, so that I can improve my understanding and apply it in similar situations in the future? This isn’t an urgent matter, but rather an opportunity for me to enhance what I have already learned.

Thank you in advance for any time and effort you dedicate to answering this question.