Javascript中的name的非一般含义?换个名,为什么输出就不一样了

Javascript中的name的特殊含义?换个名,为什么输出就不一样了?
function Person(){}
        var per = new Person;
Object.defineProperties(per,
{
"nickName":
{
value:"Tom",
writable:true
},
"age":
    {
    value:20,
    configurable:false,
    writable:false
    }
});

var name = Object.getOwnPropertyDescriptor(per,"nickName");
alert(JSON.stringify(name));

变量名为name时的输出是
Javascript中的name的非一般含义?换个名,为什么输出就不一样了

将变量名name改为o,输出如下:
Javascript中的name的非一般含义?换个名,为什么输出就不一样了

这是为什么?name在Javascript有什么特别含义?

------解决方案--------------------
因为你第一句是function Person(){},已经结束了,
所以下面的代码可能在全局context中,也就是说你以为
alert(JSON.stringify(name));
是输出的上面的var name
但实际上可能输出的是window.name,
再查查代码把,看看同一环境里面有没有定义name,或者隐含的name
------解决方案--------------------
好问题啊
经过 简单的 检查测试

window.name 是窗口的名称 是于一个 属性成员
注意属性成员 一般是重新 定义   = 操作符号的
也就是 可能是这样定义 
window.name { 
     _name =  ''; 
     set:function(val){
         _name = val.toString();
      }
     get:function(){
        return _name;
    }
}