Javascript 如何使用if语句中声明的变量在else语句中重新使用它

Javascript 如何使用if语句中声明的变量在else语句中重新使用它,javascript,node.js,if-statement,multiprocessing,Javascript,Node.js,If Statement,Multiprocessing,所以我正在使用集群,我对它有点陌生,我想得到一个在if语句中声明的输入,然后在else语句中使用它 Multi_processing = async() => { if (cluster. isMaster) { const name = await prompt(' input ');// input which want to be re used in else console.log(`Master ${process.pid} is running`);

所以我正在使用集群,我对它有点陌生,我想得到一个在if语句中声明的输入,然后在else语句中使用它

Multi_processing = async() => {
  if (cluster. isMaster) {
    const name = await prompt(' input ');// input which want to be re used in else 
    console.log(`Master ${process.pid} is running`);
    for (let i = 0; i <2; i++) {
      cluster.fork();
    
      console.log(name)
    }
    cluster.on('exit', (worker, code, signal) => {
      console.log(`worker ${worker.process.pid} finished`);
    });
  }
    else {
    console.log(name) // name is undefined
    console.log(`Worker ${process.pid} started`);
  }
}
Multi_processing();
Multi_processing=async()=>{
if(cluster.isMaster){
const name=wait prompt('input');//要在else中重复使用的输入
log(`Master${process.pid}正在运行`);
for(设i=0;i{
log(`worker${worker.process.pid}finished`);
});
}
否则{
console.log(name)//名称未定义
log(`Worker${process.pid}已启动`);
}
}
多_处理();
如果你问为什么我没有把变量放在else中,它会做一些奇怪的事情,比如它继续要求输入,我想把它放在If语句中,所以输入只问一次,而不是问我分叉代码多少次

编辑:只是为了解释为什么我没有将输入放在集群之外。ismaster下面是一个图像,显示了即使fork编号只有2也会发生什么

如果块和Else块是不同的块。在If块内声明变量时,连续的Else块无法识别该变量。因此,必须在公共空间中声明变量。这样If块和Else块都可以识别它。

If块和Else块是不同的块。在If块内声明变量时,连续的Else块无法识别该变量。因此,必须在公共空间中声明变量。这样If和Else块都可以识别它。

您可以使用闭包在函数调用之间存储
name
,并避免全局变量:

Multi_processing = (() => {
  let name;
  return async() => {
    if (cluster.isMaster) {
      name = await prompt(' input ');// input wich want to be re used in else 
      console.log(`Master ${process.pid} is running`);
      for (let i = 0; i <2; i++) {
        cluster.fork();
        console.log(name)
      }
      cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} finished`);
      });
    } else {
      console.log(name) // name is undefined
      console.log(`Worker ${process.pid} started`);
    }
  };
})();
Multi_processing();

您可以使用闭包在函数调用之间存储
name
,并避免全局变量:

Multi_processing = (() => {
  let name;
  return async() => {
    if (cluster.isMaster) {
      name = await prompt(' input ');// input wich want to be re used in else 
      console.log(`Master ${process.pid} is running`);
      for (let i = 0; i <2; i++) {
        cluster.fork();
        console.log(name)
      }
      cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} finished`);
      });
    } else {
      console.log(name) // name is undefined
      console.log(`Worker ${process.pid} started`);
    }
  };
})();
Multi_processing();

为什么在if块中设置函数局部变量,并在else块中读取它?您必须将
name
存储在其他地方。您可以创建一个类或闭包。我在if语句中设置了输入,这样,如果我在if块外设置它,它将只被调用一次,调用次数将与OPF相同。为什么您在if块中设置函数局部变量,并在else块中读取它?您必须将
name
存储在其他地方。你可以创建一个类或闭包。我在if语句中设置了输入,因此如果我在if块之外设置它,它将只被调用一次,调用次数与ophello相同,谢谢你的评论我之前尝试过在if和else块之外声明变量,问题是,当操作被分叉时,它会问与分叉操作相同的问题。您可以用回调标记它。回调完成后,传递值并触发此块。一旦提示符('input')成功获取值,它将触发Multi_processinghello,感谢您的评论我之前尝试过在if和else块外声明变量,问题是当操作分叉时,它会问与分叉操作相同的问题。您可以用回调标记它。回调完成后,传递值并触发此块。一旦提示(“输入”)成功获取值,它将触发多线程处理