Javascript 如何使用if语句中声明的变量在else语句中重新使用它
所以我正在使用集群,我对它有点陌生,我想得到一个在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`);
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块外声明变量,问题是当操作分叉时,它会问与分叉操作相同的问题。您可以用回调标记它。回调完成后,传递值并触发此块。一旦提示(“输入”)成功获取值,它将触发多线程处理