Смотрите
var obj = {
test() {
console.log(this);
}
}(obj.test)()
На что это похоже?
А вот так?
var obj = {
test() {
console.log(this);
}
}();
На попытку вызвать функцию с выражения, и передать в нее obj.test, хотя obj еще не существует.
Вот так еще нагляднее
var obj = ({
test() {
console.log(this);
}
}(obj.test)());
т.е. присваивание всего этого в obj идет в последнюю очередь, а до этого, мы пытаемся использовать obj, но он еще не существует. Хотя даже если вы вместо obj.test поставите другую переменную, или например число, то будет ошибка
Uncaught TypeError: {(intermediate value)} is not a function
т.е. вы пытаетесь выполнить конструкцию вида
({a: 10}())
И все из-за того, что вы забыли точку с запятой
var obj = {
test() {
console.log(this);
}
};
(obj.test)()