Javascript 理解console.log(console.log(对象))

Javascript 理解console.log(console.log(对象)),javascript,Javascript,我是编程和js新手,我正在努力学习javascript的关键 var obj1 = { name: 'rawn', fn: function() { console.log(this); } }; console.log(obj1.fn()); 当我输出这个时,我得到了对象(如预期的)-{name:“rawn”,fn:ƒ},在另一行我得到了-未定义的。所以我的问题是为什么以及如何得到未定义的 我的理解是,我们正在编写这一行-console.log(obj

我是编程和js新手,我正在努力学习javascript的关键

var obj1 = {
    name: 'rawn',
    fn: function() {
        console.log(this);
    }
};
console.log(obj1.fn());
当我输出这个时,我得到了对象(如预期的)-
{name:“rawn”,fn:ƒ}
,在另一行我得到了-
未定义的
。所以我的问题是为什么以及如何得到未定义的


我的理解是,我们正在编写这一行-
console.log(obj1.fn())
as,
console.log(console.log(this))
,那么javascript引擎如何将结果显示为
undefined
(在执行上下文中什么是未定义的)?

这是因为两个原因。首先,在
console.log中(this)
函数中
的上下文是对象本身。因此,它会打印出
obj1
的内脏

其次,在
console.log(obj1.fn())中,实际上您正在调用不返回任何内容的方法。相反,如果您说
console.log(obj1.fn)它将返回:

ƒ(){ console.log(this); }


希望这能有所帮助。

console.log(obj1.fn())
console.log(console.log(this))
根本不是等价的,但它们实际上有相同的结果,原因相同:内部函数不返回任何内容。这些函数的返回值为
未定义
。这就是外部
console.log

记录的内容。

您希望得到的结果是什么…?@deceze i虽然它只需将对象打印两次
console.log(obj1.fn())和console.log(console.log(this)),但我认为当我在fn()中说()时,它会执行我编写的代码部分,即console.log(this)噢,是的,我不是字面意思,我是说
console.log(this)
首先从
obj.fn()
调用,然后调用外部
控制台.log
如果函数被传递到函数console.log(),那么函数将显示传递的函数()的值。
现在我知道发生了什么!