在js函数中声明vs未声明的变量

时间:2016-09-12 07:47:49

标签: javascript function variables constructor

在下面的一段代码中(从“JavaScript忍者的秘密”中获取的函数的简短版本)我不了解'initializing'变量在声明时的行为,而不是在声明它时。

如果我宣布它,那么它的价值总是假的。我注意到的另一件事是,声明变量的方式仅在proto = new this()时相关,如果proto = new Class(),'initialize'变量具有可预测的行为。有人可以如此善良地向我解释这种行为的动态吗?

Foo.objects.order_by('-frequency')[0:10].bar_set.all()

1 个答案:

答案 0 :(得分:0)

感谢您的回复,我不好意思不够清楚。这是另一个尝试:

 Object.subClass = function(properties) {

    initializing = true;
    var proto = new this();
    initializing = false;

    function Class() {
        console.log(initializing)
    }

    Class.prototype = proto;
    Class.constructor = Class;
    Class.subClass = arguments.callee;
    return Class;
};

 var Constructor = Object.subClass()
 var subConstructor = Constructor.subClass() // true
 var instance = new subConstructor() // false

 Object.subClass = function(properties) {

   var initializing = true;
   var proto = new this();
       initializing = false;

    function Class() {
        console.log(initializing)
    }

    Class.prototype = proto;
    Class.constructor = Class;
    Class.subClass = arguments.callee;
    return Class;
};

 var Constructor = Object.subClass()
 var subConstructor = Constructor.subClass() // false
 var instance = new subConstructor() // false

我知道这是实现基于原型的编程的一种不好的方法,我的问题源于initialize变量的行为。

正如您在Object.subClass的第一个示例中所观察到的那样,未声明的'初始化'变量,在被调用时,根据调用的上下文返回true或false

在Object.subClass的第二个例子中,声明的'初始化'变量,在被调用时,只返回false,无论调用的上下文如何。