如何解决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}
变量是程序中链接(“绑定”)到值的字符串(“标识符”)。示例:
let age = 3
let price = 12.99
此处,age
链接到值 3
,price
链接到值 12.99
。
let checkers = {name: 'Checkers',age: 5}
let myPet = checkers
此处,checkers
和 myPet
链接到相同的值 {name: 'Checkers',age: 5}
。
此链接(“绑定”)仅在创建它的块中以及程序源中该块内的任何块中可见。在某个块内,可见绑定列表是它的“词法环境”。
你可以用变量做三件事:
-
在表达式或函数调用中使用它,例如
age + 5
或console.log(myPet)
。在这种情况下,您实际使用的是绑定到变量的值,而不是变量本身 -
修改绑定值,例如
myPet.age += 1
。只有对象值可以这样修改,其他值不能(它们是“不可变的”) -
为它创建一个新的绑定,例如
age = 5
。在这种情况下,旧的绑定丢失,变量不再连接到以前的值
这基本上就是您需要知道的全部内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。