Q:

How a multidimensional array value assignation works in this case?

Why this function does not return an string with the first letter of each word on upper case?
function titleCase(str) {
     str = str.split(' ');
     for (var i = 0; i < str.length; i++) {
         str[i][0] = str[i][0].toUpperCase(); 
         console.log(str);
     }
     return str;
}

A:

The reason Why this function does not return an string with the first letter of each word on upper case is because strings are immutable.

You cannot change a character within a string.

Therefore this does not work in javascript:
str[i][0] = 'c';

This does not change the string str[i].
However in order to achieve your goal you can make a new string with first letter uppercase and assign it to the variable containing your string.

A:

You need to replace the whole array element with a new string. All you are doing is modifying a string but not what is in the array.
Then you need to join() the array again to get a string returned
function titleCase(str) {
     str = str.split(' ');
     for (var i = 0; i < str.length; i++) {
         str[i] = str[i][0].toUpperCase() + str[i].slice(1); 
       // ^^ reassign array element with new string ^^   
     }
     return str.join(' ');
}

