在 javascript 中重新声明 const 变量
redeclare const variable in javascript
const
在 JavaScript
中的一个关键特征是 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
重新声明一个不会导致错误,使用 let
和 const
会导致错误)。
每次调用函数都会创建一个新的作用域。
该范围内仍然只有该变量的一个实例。
这个常量只存在于回调函数的块中。函数执行后,常量从内存中卸载。
const
是块范围的 const - JavaScript | MDN。
在代码片段中,每次在 discover
事件触发后调用回调函数,都会为回调函数创建一个新的执行上下文。
const clientID
的作用域被限制在最近的大括号内,在声明时它只能被赋值一次。
const
在 JavaScript
中的一个关键特征是 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
重新声明一个不会导致错误,使用 let
和 const
会导致错误)。
每次调用函数都会创建一个新的作用域。
该范围内仍然只有该变量的一个实例。
这个常量只存在于回调函数的块中。函数执行后,常量从内存中卸载。
const
是块范围的 const - JavaScript | MDN。
在代码片段中,每次在 discover
事件触发后调用回调函数,都会为回调函数创建一个新的执行上下文。
const clientID
的作用域被限制在最近的大括号内,在声明时它只能被赋值一次。