js中值类型的语义拷贝

Semantic copy of value type in js

我几个月前开始使用 JS,当我们 运行 将代码写入控制台以及程序如何保存和读取数据类型时,我真的很感兴趣。

与非文字语法相比,“已实现”和文字语法意味着什么。我没有理解他们提供的示例,因为在这种情况下 A 已被覆盖,因此它应该在控制台中记录 2。我不明白什么是复制语义。

对于第二个屏幕,对我来说更糟,因为我真的不明白词法环境的概念以及当他们说:“词法环境中添加了两个变量;a 和 b。它们的值与它们的定义一起存储在词法环境中的键值对映射中。"

文章第一部分举例

文章的第二部分与词汇域解释

感谢您的帮助,如果我的问题很愚蠢,我深表歉意, 祝你有美好的一天!

这里最大的混淆来源是一些作者试图使用其他语言的概念来描述 javascript 的工作原理。在这里您会听到诸如“复制语义”、“按值传递”、“按引用传递”等词。事实是,这些概念根本不适用于 javascript.

在 javascript 中,我们有 valuesvariables。值可以用文字表示。文字是表示值的字符集合。示例:

1    'Mary'   true    [4,5,6]    {name: 'Mary', age: 22}

[...]{...} 文字与其他文字不同,因为它们总是创建一个新值,即使它们看起来相同。这就是为什么

  'Mary' is equal to 'Mary`

但是

  {name: 'Mary', age: 22} is not equal to {name: 'Mary', age: 22}

变量是程序中的一个字符串(“标识符”)linked(“绑定”)到一个值。示例:

let age = 3
let price = 12.99

此处,age 被 link 编辑为值 3price 被 link 编辑为值 12.99

let checkers =  {name: 'Checkers', age: 5}
let myPet =  checkers

这里,checkersmyPet 被 link 编辑为相同的值 {name: 'Checkers', age: 5}

此 link(“绑定”)仅在创建它的块中以及程序源中该块内的任何块中可见。在某些块内,可见绑定列表是它的“词法环境”。

您可以使用变量做三件事:

  • 在表达式或函数调用中使用它,例如age + 5console.log(myPet)。在这种情况下,您实际使用的是绑定到变量的值,而不是变量本身

  • 修改绑定值,例如myPet.age += 1。只能以这种方式修改对象值,其他值不能(它们是“不可变的”)

  • 为其创建一个新绑定,例如age = 5。在这种情况下,旧绑定丢失,变量不再连接到以前的值

这基本上就是您需要知道的全部内容。