js中值类型的语义拷贝
Semantic copy of value type in js
我几个月前开始使用 JS,当我们 运行 将代码写入控制台以及程序如何保存和读取数据类型时,我真的很感兴趣。
与非文字语法相比,“已实现”和文字语法意味着什么。我没有理解他们提供的示例,因为在这种情况下 A 已被覆盖,因此它应该在控制台中记录 2。我不明白什么是复制语义。
对于第二个屏幕,对我来说更糟,因为我真的不明白词法环境的概念以及当他们说:“词法环境中添加了两个变量;a 和 b。它们的值与它们的定义一起存储在词法环境中的键值对映射中。"
文章第一部分举例
文章的第二部分与词汇域解释
感谢您的帮助,如果我的问题很愚蠢,我深表歉意,
祝你有美好的一天!
这里最大的混淆来源是一些作者试图使用其他语言的概念来描述 javascript 的工作原理。在这里您会听到诸如“复制语义”、“按值传递”、“按引用传递”等词。事实是,这些概念根本不适用于 javascript.
在 javascript 中,我们有 values
和 variables
。值可以用文字表示。文字是表示值的字符集合。示例:
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 编辑为值 3
,price
被 link 编辑为值 12.99
。
let checkers = {name: 'Checkers', age: 5}
let myPet = checkers
这里,checkers
和 myPet
被 link 编辑为相同的值 {name: 'Checkers', age: 5}
。
此 link(“绑定”)仅在创建它的块中以及程序源中该块内的任何块中可见。在某些块内,可见绑定列表是它的“词法环境”。
您可以使用变量做三件事:
在表达式或函数调用中使用它,例如age + 5
或 console.log(myPet)
。在这种情况下,您实际使用的是绑定到变量的值,而不是变量本身
修改绑定值,例如myPet.age += 1
。只能以这种方式修改对象值,其他值不能(它们是“不可变的”)
为其创建一个新绑定,例如age = 5
。在这种情况下,旧绑定丢失,变量不再连接到以前的值
这基本上就是您需要知道的全部内容。
我几个月前开始使用 JS,当我们 运行 将代码写入控制台以及程序如何保存和读取数据类型时,我真的很感兴趣。
与非文字语法相比,“已实现”和文字语法意味着什么。我没有理解他们提供的示例,因为在这种情况下 A 已被覆盖,因此它应该在控制台中记录 2。我不明白什么是复制语义。
对于第二个屏幕,对我来说更糟,因为我真的不明白词法环境的概念以及当他们说:“词法环境中添加了两个变量;a 和 b。它们的值与它们的定义一起存储在词法环境中的键值对映射中。"
文章第一部分举例
文章的第二部分与词汇域解释
感谢您的帮助,如果我的问题很愚蠢,我深表歉意, 祝你有美好的一天!
这里最大的混淆来源是一些作者试图使用其他语言的概念来描述 javascript 的工作原理。在这里您会听到诸如“复制语义”、“按值传递”、“按引用传递”等词。事实是,这些概念根本不适用于 javascript.
在 javascript 中,我们有 values
和 variables
。值可以用文字表示。文字是表示值的字符集合。示例:
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 编辑为值 3
,price
被 link 编辑为值 12.99
。
let checkers = {name: 'Checkers', age: 5}
let myPet = checkers
这里,checkers
和 myPet
被 link 编辑为相同的值 {name: 'Checkers', age: 5}
。
此 link(“绑定”)仅在创建它的块中以及程序源中该块内的任何块中可见。在某些块内,可见绑定列表是它的“词法环境”。
您可以使用变量做三件事:
在表达式或函数调用中使用它,例如
age + 5
或console.log(myPet)
。在这种情况下,您实际使用的是绑定到变量的值,而不是变量本身修改绑定值,例如
myPet.age += 1
。只能以这种方式修改对象值,其他值不能(它们是“不可变的”)为其创建一个新绑定,例如
age = 5
。在这种情况下,旧绑定丢失,变量不再连接到以前的值
这基本上就是您需要知道的全部内容。