Javascript 我能';“别把我的头缠在周围”;这";此代码中的关键字

Javascript 我能';“别把我的头缠在周围”;这";此代码中的关键字,javascript,Javascript,我在JS中查看了一些承诺,在记录“this”时出现了奇怪的输出。记录“this”的顺序影响了代码的输出。我以为我知道“this”是如何工作的,但显然我不知道。有人能帮我把这段代码记在下面吗 const USER = { name: 'Glad Chinda', country: 'Nigeria', job: 'Fullstack Engineer' }; console.log(this); Promise.resolve(USER).then(user =>

我在JS中查看了一些承诺,在记录“this”时出现了奇怪的输出。记录“this”的顺序影响了代码的输出。我以为我知道“this”是如何工作的,但显然我不知道。有人能帮我把这段代码记在下面吗

const USER = {
    name: 'Glad Chinda',
    country: 'Nigeria',
    job: 'Fullstack Engineer'
  };

console.log(this);
Promise.resolve(USER).then(user => console.log(user.name));
console.log(this);

//OUTPUT
//{}
//{}
//Glad Chinda

------------------------------------------------------------------

//Removing the first console.log(this)
const USER = {
    name: 'Glad Chinda',
    country: 'Nigeria',
    job: 'Fullstack Engineer'
  };

Promise.resolve(USER).then(user => console.log(user.name));
console.log(this);

//OUTPUT
//{}
//Glad Chinda

------------------------------------------------------------------

//Removing the second console.log(this)
const USER = {
    name: 'Glad Chinda',
    country: 'Nigeria',
    job: 'Fullstack Engineer'
  };

console.log(this);
Promise.resolve(USER).then(user => console.log(user.name));

//OUTPUT
//{}
//Glad Chinda
------------------------------------------------------------------

//Removing both
const USER = {
    name: 'Glad Chinda',
    country: 'Nigeria',
    job: 'Fullstack Engineer'
  };

Promise.resolve(USER).then(user => console.log(user.name));

//OUTPUT
//Glad Chinda

“this”是您当前工作的范围。你的问题似乎是你对承诺的理解。Promission异步执行,这意味着Promission处理程序中的日志记录将持续进行,因为它的执行会延迟,从而不会阻止程序的其余执行。

“这”是您正在使用的当前作用域。你的问题似乎是你对承诺的理解。Promissions异步执行,这意味着Promission处理程序中的日志记录将持续进行,因为它的执行会延迟,从而不会阻止程序的其余执行。

Promissions异步执行,这意味着Promission.resolve()行之后的执行将并行进行,而不是按顺序进行。 您可以尝试以下方法以获得清晰的理解:

Promise.resolve(USER).then(user => console.log(user.name));
Promise.resolve(USER).then(user => console.log(`${user.name} -> new entry`));

运行此代码并查看它的功能。

承诺异步执行,这意味着在promise.resolve()行之后的执行是并行执行,而不是顺序执行。 您可以尝试以下方法以获得清晰的理解:

Promise.resolve(USER).then(user => console.log(user.name));
Promise.resolve(USER).then(user => console.log(`${user.name} -> new entry`));

运行此代码并查看它的功能。

在所有这些情况下,
.then()
回调函数是最后计算的;承诺就是这样起作用的。它与
这个
无关。请查看所有那些
控制台.log(这个)
for scope-它们似乎都是当前发布在此处的顶级对象。@Markschultheis,这意味着不管控制台的顺序如何,日志(此)都将首先记录,不管顺序如何?在所有这些情况下,
。然后()
回调函数将最后计算;承诺就是这样起作用的。它与
这个
无关。请查看所有那些
控制台.log(这个)对于作用域-它们似乎都是当前发布在此处的顶级对象。@MarkSchultheis,这意味着不管控制台的顺序如何。不管顺序如何,日志(此)将首先被记录?哦,好的,我想我现在知道了。非常感谢你。我是一个初学者,所以我无法理解发生了什么。
这与范围无关。(除非它在一个arrow函数中,即使是这样,作用域也只用于确定要使用哪个函数的
this
)这与函数的调用方式有关。由于我们没有被告知OP的函数是如何调用的(甚至它是否在函数内部),我们实际上无法回答关于
这个
的问题(尽管他们似乎只是被异步搞糊涂了,
这个
是不相关的)。@RobinZigmond这是一个关键字,指的是它所属的对象,在javascript中,这或多或少与作用域相同。在这种情况下,代码看起来只是一个已执行的js文件,因此这确实是范围。@bryan60,它并不意味着“它所属的对象”,尽管我同意在一般情况下这是一种合理的解释。更重要的是,如果说这个对象与函数的作用域有关,那就错了。首先,作用域是词汇性的,因此在编写代码时是固定的(除非你正在处理
eval
),而
这个
的值在每次执行函数时都可能不同,而且常常不同,因为它主要取决于调用函数的方式。不确定你为什么要发布这个链接,我非常熟悉这个
在JS中的工作原理。它与范围无关,而且我在w3schools链接中没有看到任何地方有相反的说法。(虽然这不会让我感到惊讶,w3schools因为不总是准确而臭名昭著。)如果我们在交易链接,我将提供迄今为止我所见过的最好的解释(第2章在这方面最相关)。哦,好的,我想我现在明白了。非常感谢你。我是一个初学者,所以我无法理解发生了什么。
这与范围无关。(除非它在一个arrow函数中,即使是这样,作用域也只用于确定要使用哪个函数的
this
)这与函数的调用方式有关。由于我们没有被告知OP的函数是如何调用的(甚至它是否在函数内部),我们实际上无法回答关于
这个
的问题(尽管他们似乎只是被异步搞糊涂了,
这个
是不相关的)。@RobinZigmond这是一个关键字,指的是它所属的对象,在javascript中,这或多或少与作用域相同。在这种情况下,代码看起来只是一个已执行的js文件,因此这确实是范围。@bryan60,它并不意味着“它所属的对象”,尽管我同意在一般情况下这是一种合理的解释。更重要的是,如果说这个对象与函数的作用域有关,那就错了。首先,作用域是词汇性的,因此在编写代码时是固定的(除非你正在处理
eval
),而
这个
的值在每次执行函数时都可能不同,而且常常不同,因为它主要取决于调用函数的方式。不确定你为什么要发布这个链接,我非常熟悉这个
在JS中的工作原理。它与范围无关,而且我在w3schools链接中没有看到任何地方有相反的说法。(虽然这不会让我感到惊讶,w3schools因为不总是准确而臭名昭著。)如果我们在交易链接,我将提供迄今为止我所见过的最好的解释(第2章在这方面最相关)。耶,我终于明白了。它并行执行其余的代码,而不干扰序列,并按顺序执行承诺。非常感谢。耶,我终于得到了它。它执行r