在javascript中重新声明const变量



constJavaScript中的一个关键特性是不能重新声明const变量。

然而,在这个从这个链接获取的代码中:

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,它也会被创建多次。

这怎么可能?

变量名在作用域中只能存在一次。(用var重新定义一个不会导致错误,用letconst这样做会导致错误(。

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

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

它只在每个作用域中声明一次,如果clientID在外部作用域中,比如说与signalServer一起,那么它将以您认为的方式进行

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

const是块范围的常量-JavaScript|MDN。

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

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

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

最新更新