奇怪的变量取消定义?

时间:2016-07-06 04:52:35

标签: javascript variables undefined hoisting

好的伙计们,所以我有这个代码:

var q=(function(){
    var u,q,x;
    x=616;
    q=q_construct();
    qp_construct();
    return q;
    function q_construct(){
        var q,pro;
        q={
            a:1
        };
        return q;
    };
    function qp_construct(){
        console.log('1 ⇒    ',q,x);
        Object.defineProperty(Object.prototype,'q',{get:function(){
            console.log('2 ⇒    ',q,x);
            var r={b:2};
            return r;
        }});
    };
})();

当我将y={z:616}; y.q;输入控制台时,我得到:

1 ⇒  Object {a: 1} 616

y={z:616}; y.q;                 //  console entry point

2 ⇒  Object {a: 1} 616
Object {b: 2}

但如果我改变了:

var r={b:2};
return r;

var q={b:2};
return q;

结果改变自:

2 ⇒  Object {a: 1} 616

2 ⇒  undefined 616

我无法找到原因,在将此变量名称设置为q时,固有范围中的q将重新定义为undefined。在我的脑后有些东西在唠叨,说我读了一些可能有帮助的“吊装”的东西?

0 个答案:

没有答案