(1)アロー関数(さらに省略版)の即時実行できると思ったらできませんでした
var obj = ((x)=>{a:x})(10);
console.log(obj);//undefined

(2)オブジェクト返さなければいけました
var obj = ((x)=>x+10)(10);
console.log(obj);//20

(3)アロー使わずに即時の別の書き方ならいけました
var obj = ((x) => {return {a:x}})(10);
console.log(obj);

なぜ(1)は無理なのでしょうか
(4)文字型ならできました
var obj = ((x)=>'{a:'+x+'}')(10);
console.log(obj, typeof obj);
ので、(1)では{}が関数のブロックと認識されているということでしょうか?
しかしundefinedが返ってきてエラーもなしとは一体どういうことでしょうか?