Javascript 为什么在执行控制台时,console.log是作为';返回的函数中的对象;未定义';?(了解创建阶段、执行阶段)
我试图理解执行上下文、创建阶段和执行阶段 我在想,谁能帮我弄明白为什么Javascript 为什么在执行控制台时,console.log是作为';返回的函数中的对象;未定义';?(了解创建阶段、执行阶段),javascript,object,undefined,executioncontext,Javascript,Object,Undefined,Executioncontext,我试图理解执行上下文、创建阶段和执行阶段 我在想,谁能帮我弄明白为什么 console.log(thisFunction.ojbect1); 返回-'未定义' 我会认为,在创建阶段之后,当变量被指定为“未定义”时,执行阶段将运行,在执行阶段,变量将被对象填充 那么为什么我得到的是“object1”的“undefined”,而不是整个对象 非常感谢。代码如下 var thisFunction = function(){ var object1 = { firstname:
console.log(thisFunction.ojbect1);
返回-'未定义'
我会认为,在创建阶段之后,当变量被指定为“未定义”时,执行阶段将运行,在执行阶段,变量将被对象填充
那么为什么我得到的是“object1”的“undefined”,而不是整个对象
非常感谢。代码如下
var thisFunction = function(){
var object1 = {
firstname: 'Mark',
printName: function(){
console.log(this.firstname);
}
};
object1.printName();
};
thisFunction();
console.log(thisFunction.object1);
“Object1”不是“thisFunction”的属性,因此不能调用它。“Object1”是在“thisFunction”范围内创建的变量
您只能访问父作用域的变量
如果您想更多地了解函数作用域,这里有一些有趣的阅读资料
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);
输出:
功能对象
对象
串 请参见中的示例
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);
输出:
功能对象
对象
串
参见
object1
是此函数的局部变量
因此不能在此函数
的范围外隐式访问object1
是此函数
的局部变量,因此不能在此函数
的范围外隐式访问。谢谢,还有一些学习要做,以充分了解引擎盖下发生了什么与您的解决方案。感谢您的反馈!请点击向上箭头来更新我的答案。谢谢,为此,我们还有一些学习要做,以充分了解引擎盖下发生的事情和您的解决方案。谢谢您的反馈!请点击向上箭头来更新我的答案。谢谢!我想我的问题是,为什么Object1被分配了变量“Undefined”。i、 为什么它在创建阶段被指定为“未定义”,而在执行阶段却从未被指定对象?我在这里可能没有任何意义:)每次调用thisFunction
时,都会创建一个新的作用域。此范围具有局部变量object1
。因此,它在此函数
之外未定义。键入thisFunction.object1
时,不会调用thisFunction
。相反,您将thisFunction
视为一个对象,并查找名为object1
的属性。这不起作用,因为thisFunction
是一个函数。您提到:“thisFunction是一个函数”,我想这就是我感到困惑的地方。函数不是javascript中的对象吗?函数不是对象,但它们可以通过使用new
关键字生成对象。非常感谢Lars Kristian。然后,我被我正在学习的人弄糊涂了,就像他们说的——“功能就是对象”。我从Mozilla功能页面上读到这一行在JavaScript中,函数是一级对象,因为它们可以像任何其他对象一样具有属性和方法。”我头晕目眩:汉克斯!我想我的问题是,为什么Object1被分配了变量“Undefined”。i、 为什么它在创建阶段被指定为“未定义”,而在执行阶段却从未被指定对象?我在这里可能没有任何意义:)每次调用thisFunction
时,都会创建一个新的作用域。此范围具有局部变量object1
。因此,它在此函数
之外未定义。键入thisFunction.object1
时,不会调用thisFunction
。相反,您将thisFunction
视为一个对象,并查找名为object1
的属性。这不起作用,因为thisFunction
是一个函数。您提到:“thisFunction是一个函数”,我想这就是我感到困惑的地方。函数不是javascript中的对象吗?函数不是对象,但它们可以通过使用new
关键字生成对象。非常感谢Lars Kristian。然后,我被我正在学习的人弄糊涂了,就像他们说的——“功能就是对象”。我从Mozilla功能页面上读到这一行在JavaScript中,函数是一级对象,因为它们可以像任何其他对象一样具有属性和方法。”我的头在旋转:D