gpt4 book ai didi

javascript - Node.js 上的 VAR 声明

转载 作者:行者123 更新时间:2023-11-28 20:09:42 25 4
gpt4 key购买 nike

我正在学习 Node.js。在我正在使用的书中有一行我不确定我是否确切知道它是如何工作的,并且正在寻求确认。

该行是:

var user = req.user = users[req.params.name];

我在 Google 上进行了一些研究,我认为其工作方式是:

第一步将 users[request.params.name] 的内容复制到 req.user 中,然后第二步将 req.user 的内容复制到 user 中。最终 user == users[req.params.name];

您能否确认我的理解是否正确,如果不正确,请解释一下该行是如何工作的?

谢谢

最佳答案

基本上就是这样。你所拥有的是一个复合作业。赋值表达式的结果是被赋值的值,因此该值可以是另一个赋值表达式的右侧。

但实际上在这之前还发生了其他事情:变量 user 在当前上下文中定义。以下是详细的操作顺序:

  1. 进入上下文后,变量user 被定义为值undefined。这发生在上下文中的任何分步代码发生之前。

  2. 当逐步执行代码时,执行光标到达该代码时,则:

    1. 在变量 req 上查找属性 params

    2. req.params 的结果中查找属性 name

    3. 具有由该值(req.params.name 的值)定义的名称的属性是从(大概)由users引用的对象中检索的> 变量。

    4. 结果值将分配给 req 上的 user 属性。

    5. 相同的值被分配给 user 变量。

(我跳过了几个记账步骤以避免过度掠夺。)

需要注意的是,在上面的步骤 2.4 和 2.5 之间,req.user 的值不是req.user 中读取的属性(property)。该值在 2.3 中确定,然后在 2.4 中使用,并在 2.5 中再次使用。也就是说,a = b = c;b = c;相同。 a = b;。不同之处在于,后者在第二次赋值时从 b 中检索值;在前者中,它不是,它只是从 b = c 部分重用。现在,当它是一个简单的属性时,这种区别并不特别重要,但如果您使用属性访问器函数(无论是来自 Mozilla 早期 JavaScript 变体的非标准类型,还是来自 ECMAScript5 的新标准类型),这种区别就很重要。 。 Live Example差异的| Source

关于javascript - Node.js 上的 VAR 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com