为什么当我执行console.log时,我的对象在函数中返回为' undefined'? (了解创建阶段,执行阶段)

时间:2017-07-14 09:57:46

标签: javascript object undefined executioncontext

我正在尝试理解执行上下文,创建阶段和执行阶段。

我在想,有人可以帮我理解原因吗,

console.log(thisFunction.ojbect1);

退货 - ' undefined'。

我认为,在创建阶段之后,当变量被分配'未定义时,运行执行阶段,然后用对象填充变量。

那么为什么我会得到未定义的' for' object1',而不是整个对象?

非常感谢。代码如下。

var thisFunction = function(){
    var object1 = {
        firstname: 'Mark',
        printName: function(){
        console.log(this.firstname);
        }
    };

    object1.printName();
};

thisFunction();
console.log(thisFunction.object1);

2 个答案:

答案 0 :(得分:0)

“Object1”不是“thisFunction”的属性,这就是你无法调用它的原因。 “Object1”是在“thisFunction”范围内创建的变量。

您只能访问父作用域的变量。

如果您想了解有关函数范围的更多信息,请阅读以下有趣内容。

答案 1 :(得分:0)

  1. 您需要使用 this 将变量分配给函数对象 thisFunction
  2. 然后您需要使用 new 来创建 thisFunction 的对象。
  3. 除了:

    之外,它适用于您
        var thisFunction = function(){
    
        this.object1 = {
            firstname: 'Mark',
            printName: function(){
            console.log(this.firstname);
            }
        };
    
        this.object1.printName();
    };
    
    var tf = new thisFunction();
    console.log(tf.object1);
    

    使用typeof可以帮助您更好地理解对象和功能之间的区别:

    console.log(typeof thisFunction);
    console.log(typeof tf);
    console.log(typeof tf.object1);
    console.log(typeof tf.object1.firstname);
    

    输出:

      

    功能
      对象
      对象
      串

    请参阅Plunker

    中的此示例