我正在与node.js
和socket.io
合作,
而且我想获取一个变量,但是会引发错误。
io.sockets.on('connection', function(socket) {
test = 1;
})
console.log(test) // ReferenceError: test is not defined
我尝试过的
io.sockets.on('connection', function(socket) {
return test = 1;
})
预期结果
io.sockets.on('connection', function(socket) {
test = 1;
})
console.log(test) // expected reslut test = 1
答案 0 :(得分:1)
您的代码中有两个问题。
1。 JavaScript本质上是异步的。因此,该控件在继续下一行之前不会等待事件触发。
它与您的问题有什么关系?
io.sockets.on('connection', function(socket) {
test = 1;
})
console.log(test)
仅在触发test=1
事件时,函数(在其中分配connection
的位置)才会执行。因此,javascript引擎会注册您的io.sockets.on(...)
,然后继续执行下一行,即console.log(test)
现在,由于事件尚未触发,因此没有为test
2。 test
无法访问变量console.log(test)
假设您未处于strict
模式,则在执行test
行时,test = 1
将得到 提升 它可以使用,但是在执行console.log(test)
时,test=1
尚未执行(第1点),因此引用错误。
因此,我建议您将console.log
语句代码放入匿名函数的主体中。
io.sockets.on('connection', function(socket) {
test = 1;
console.log(test);
})