初学者问题 - 函数内部和外部的变量

-1 javascript

我对 Javascript 很陌生,并且有一个关于声明和访问变量的初学者问题。为什么 console.log 显示“text”的 textContent 已更改,但实际上并未更改?如果我不是在函数外部声明“文本”,而是在函数内部声明它,则可以使函数正常工作 - 然后实际的 textContent 发生变化

let text = document.querySelector("#text").textContent

function changeText() {
  text = "Goodbye"
}

changeText()
console.log(text)
Run Code Online (Sandbox Code Playgroud)
<p id="text">Hi</p>
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

本次作业:

let text = document.querySelector("#text").textContent
Run Code Online (Sandbox Code Playgroud)

存储in值的副本。和之间没有显式或隐式的联系。您知道有两个位置碰巧包含相同的值。document.querySelector("#text").textContenttexttextdocument.querySelector("#text").textContent

然后,您继续更新其中一个位置以包含不同的值:

text = "Goodbye"
Run Code Online (Sandbox Code Playgroud)

这对其他地方没有任何影响。

这也不是特定于 DOM 的。一般而言,变量和/或属性就是这种情况。这里还有一些例子:

let text = document.querySelector("#text").textContent
Run Code Online (Sandbox Code Playgroud)

其技术术语是按值传递:如果将内存位置A(变量、属性等)分配/传递给内存位置B,则B会被分配A值的副本,而不是引用或指针到A

另请参阅JavaScript 是按引用传递还是按值传递语言?