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

标签 javascript

我看到下面关于这个 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/

相关文章:

javascript - Firefox 不响应 .addClass

javascript - Foundation5 停止下拉菜单可点击

javascript - 如何让node js文件在linux中的某个日期的某个时间运行?

javascript - 将 JSON 转换为放入 Sdcard 的 CSV 文件

javascript - PHP - RSS - 地理定位

javascript - 使用 javascript 提交动态创建的表单

javascript - 处理格式不固定的 JSON 数据

javascript - jquery中的计算

javascript - 使用正则表达式在 Javascript 中形成一个没有前导零的数字

javascript - 同一个单词中的字符之间是否可以有不同的字母间距?这可以只用 CSS 来完成吗?