在 javascript 中重新声明 const 变量

redeclare const variable in javascript

constJavaScript 中的一个关键特征是 const 变量 cannot be redeclared.

但是,在从 this link 抓取的代码中:

signalServer.on('discover', (request) => {
  const clientID = request.socket.id // clients are uniquely identified by socket.id
  allIDs.add(clientID) // keep track of all connected peers
  request.discover(Array.from(allIDs)) // respond with id and list of other peers
})

每次新客户端通过套接字连接到服务器时,都会创建一个新的 const clientID = request.socket.id

所以 clientID 变量被创建了不止一次,即使它是 const.

这怎么可能?

据我所知,函数中的变量如果在函数范围内声明,则始终是临时的。因此,即使它是一个 const,它仍然是临时的,因为它是在函数内部声明的。但是,您将无法声明具有相同标识符的不同变量。所以说 const x 和后来说 let x 是不可能的。如果您在函数作用域之外识别出 const x,您将无法在函数作用域中设置具有相同标识符的变量。

它只在您拥有的每个作用域中声明一次,如果 clientID 在外部作用域中,假设与 signalServer 一起使用,那么它将按照您认为的方式工作

变量名在作用域中只能存在一次。 (使用 var 重新声明一个不会导致错误,使用 letconst 会导致错误)。

每次调用函数都会创建一个新的作用域。

该范围内仍然只有该变量的一个实例。

这个常量只存在于回调函数的块中。函数执行后,常量从内存中卸载。

const 是块范围的 const - JavaScript | MDN

在代码片段中,每次在 discover 事件触发后调用回调函数,都会为回调函数创建一个新的执行上下文。

const clientID 的作用域被限制在最近的大括号内,在声明时它只能被赋值一次。