javascript 的执行上下文问题

下面这段代码

var obj={
                a:function(){
                    this.val=true;
                }
            };

this 应该指向a 还是指向obj? 为什么?

个人测试结果:开始指向a,执行obj.a()后this指向obj。但是不清楚为什么,请高手指教~

            alert(obj.a.val);  // 结果是undefined,为什么?(明明是a属于obj,this指向a嘛,为什么是undefined?)
            alert(obj.val);    // 结果是undefined,为什么?
            obj.a();            // 执行后切换执行环境
            alert(obj.val);    // 结果是true,为什么?
            alert(obj.a.val); // 结果是undefined,为什么?

我想这里涉及到执行上下文和作用域的问题,但是两者不是同一个概念,请高手明示~

原文地址:https://www.cnblogs.com/argb/p/javascript.html