【问题标题】:As far as I know, const variables are immutable. How come this is possible?据我所知, const 变量是不可变的。这怎么可能?
【发布时间】:2021-03-02 22:40:28
【问题描述】:

我也很感兴趣,“this”关键字指的是什么?我不明白这段代码 sn-p 发生了什么,以前从未见过这样的行为。

const var_name = 'abcd';
const n = 120;
this[var_name] = n;
console.log(this[var_name]) //120

【问题讨论】:

  • 我不太确定到底是什么困扰着您。在您的情况下,this 指的是包装此 sn-p 执行上下文的某个对象(可能是 window 或任何类似的任意对象)。您的代码做了什么 - 它声明并初始化两个变量,然后将 n 的值分配给名为 'abcd' 的属性(这是 var_name 的值)。之后,您将该属性的值记录到控制台,它等于n(正如人们所期望的那样)。
  • 而声明 '...const variables are immutable' 并不完全正确,因为您可以执行const foo = {bar: 'baz'},但仍然可以执行foo.baz = 'qux' 或,甚至,foo.bar = 'qux'
  • 令我困惑的是变量“var_name”(用“const”声明)被“n”的值(120)改变了。我被告知这是不允许的。
  • 您似乎完全不知道上面的代码行到底做了什么。你不是吗?如果将console.log(var_name) 附加到以上行,则可以确保var_name 变量没有 发生变异并且它仍然等于'abcd'
  • 你是对的——这就是我在这里问这个问题的原因。就像我之前说的,我不知道发生了什么。更准确地说,我不知道这行代码是什么意思:“this[var_name] = n;”我知道这指向执行上下文中的某个对象,但我不知道为什么它在 var_name 前面以及为什么 var_name 在括号中

标签: javascript constants immutability


【解决方案1】:

这里也是初学者,但从sn-p中我了解到的是:

'this[var_name] = n;'

“this”是一个对象,您已经为对象“this”创建了一个名为“var_name”的属性,并分配了一个常量“N”的值。

总结一下,

const var_name = 'abcd';this[var_name] = n; 完全不同,因为它将变量与对象进行比较。 希望这会有所帮助:D

【讨论】:

  • 谢谢,这真的很有帮助!!!现在我明白了!!我以为 var_name 和 this[var_name] 是同一个变量!
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多