gpt4 book ai didi

javascript - For 循环不适用于该函数

转载 作者:行者123 更新时间:2023-12-02 17:11:52 25 4
gpt4 key购买 nike

这是一个 for 循环,其中包含一个函数,该函数使用 checkPort 函数指定端口是打开还是关闭。

var IPAdress = '192.168'; //Local area network to scan (this is rough)
var Portadd = 80;
var Newip;
var i=0;
var j=0;
//scan over a range of IP addresses and execute a function each time the port is shown to be open.
for(i=0; i <= 1; i++){
for(j=0; j <= 3; j++){
Newip = IPAdress+'.'+i+'.'+j;

checkPort(Portadd, Newip, function(error, status, host, port) {
// Status should be 'open' since the HTTP server is listening on that port
if(status == "open"){
console.log("IP" , Newip, "on port" , Portadd, "is open");
}
else if(status == "closed"){
console.log("IP" , Newip, "on port" , Portadd, "is closed");
}
});

console.log(Newip);
}
}

这是结果:

192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed
IP 192.168.1.3 on port 80 is closed

由于打印出来的 NewIp 工作正常,我期望结果如下所示:

IP 192.168.0.0 on port 80 is closed
IP 192.168.0.1 on port 80 is closed
IP 192.168.0.2 on port 80 is closed
IP 192.168.0.3 on port 80 is closed
IP 192.168.1.0 on port 80 is closed
IP 192.168.1.1 on port 80 is closed
IP 192.168.1.2 on port 80 is closed
IP 192.168.1.3 on port 80 is closed

有人知道为什么它在实际结果部分显示这样的 IP 吗?

最佳答案

checkPort使用稍后执行的回调函数,并且在执行时,变量NewIP中的所有IP地址都已更改.

所以结果是回调函数打印 NewIP 的最后一个值,因为它引用了该值。

您有两种选择:

  • 您可以使用参数host而是传递给回调函数。
  • 定义var NewIP通过更改 var Newip = IPAdress+'.'+i+'.'+j; 在内部 for 循环中。这将创建一个作用域为回调函数的变量。

关于javascript - For 循环不适用于该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com