gpt4 book ai didi

javascript - 为什么赋值运算符返回一个值而不是一个引用?

转载 作者:可可西里 更新时间:2023-11-01 02:17:18 27 4
gpt4 key购买 nike

我看到下面关于这个 site 解释的例子并认为两个答案都是 20 而不是返回的 10。他写道,逗号和赋值都返回一个值,而不是引用。我不太明白那是什么意思。

我理解它与将变量传递给函数或方法有关,即原始类型按值传递,对象按引用传递,但我不确定它在这种情况下如何应用。

我也了解上下文和“this”的值(在 stackoverflow 的帮助下)但我认为在这两种情况下我仍然会调用它作为一种方法,foo.bar() 这意味着 foo 是上下文但是似乎两者都会导致函数调用 bar()。

这是为什么?这意味着什么?

var x = 10;
var foo = {
x: 20,
bar: function () {return this.x;}
};

(foo.bar = foo.bar)();//returns 10
(foo.bar, foo.bar)();//returns 10

最佳答案

它与值与引用无关,它与 this 值有关(正如您所怀疑的那样)。在 JavaScript 中,this 完全 由调用函数的方式设置,而不是定义函数的位置。您可以通过以下三种方式之一设置 this 值:

  1. 使用属性访问器符号通过对象属性调用函数,可以是点符号 (obj.foo()) 或方括号符号 (obj["foo"]()).
  2. 使用 with 语句通过对象属性调用该函数(实际上只是 #1 的变体,但值得单独调用,特别是因为它在源代码中并不明显)
  3. 使用函数实例的applycall 功能。

在上面的示例中,您没有执行任何这些操作,因此您最终使用默认 this 值、全局对象等调用函数 x 来自那里而不是来自你的 foo 对象。这是思考该代码正在做什么的另一种方式:

var f = foo.bar; // Not calling it, getting a reference to it
f(); // Calls the function with `this` referencing the global object

如果您不直接使用属性来实际进行调用(而是检索属性的,然后用它进行调用),this处理不会启动。

关于javascript - 为什么赋值运算符返回一个值而不是一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3047541/

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