Javascript 为什么不停?
为什么console.log(1)永远在这里执行:Javascript 为什么不停?,javascript,Javascript,为什么console.log(1)永远在这里执行: var interval = setInterval(function() { if (true) { clearInterval(interval); console.log(1); } }, 100); 这取决于执行此代码的范围 如果interval在其范围内是唯一的(无论是全局范围还是功能范围),则这将按预期工作 但是,如果在循环中执行此代码(例如),则在每次迭代中都会使用新的间隔覆盖i
var interval = setInterval(function() {
if (true) {
clearInterval(interval);
console.log(1);
}
}, 100);
这取决于执行此代码的范围 如果
interval
在其范围内是唯一的(无论是全局范围还是功能范围),则这将按预期工作
但是,如果在循环中执行此代码(例如),则在每次迭代中都会使用新的间隔覆盖interval
,从而中断clearInterval
调用,但最后一次setInterval
调用除外:
for (var i = 0; i < 3; i++) {
var interval = setInterval(function() {
if (true) {
clearInterval(interval);
console.log(1);
}
}, 100);
}
// ^ will give you one single console log entry,
// and two more console log entries per second forever
for(变量i=0;i<3;i++){
var interval=setInterval(函数(){
如果(真){
间隔时间;
控制台日志(1);
}
}, 100);
}
//^将为您提供一个控制台日志条目,
//每秒再增加两个控制台日志条目
这取决于执行此代码的范围
如果interval
在其范围内是唯一的(无论是全局范围还是功能范围),则这将按预期工作
但是,如果在循环中执行此代码(例如),则在每次迭代中都会使用新的间隔覆盖interval
,从而中断clearInterval
调用,但最后一次setInterval
调用除外:
for (var i = 0; i < 3; i++) {
var interval = setInterval(function() {
if (true) {
clearInterval(interval);
console.log(1);
}
}, 100);
}
// ^ will give you one single console log entry,
// and two more console log entries per second forever
for(变量i=0;i<3;i++){
var interval=setInterval(函数(){
如果(真){
间隔时间;
控制台日志(1);
}
}, 100);
}
//^将为您提供一个控制台日志条目,
//每秒再增加两个控制台日志条目
这取决于执行此代码的范围
如果interval
在其范围内是唯一的(无论是全局范围还是功能范围),则这将按预期工作
但是,如果在循环中执行此代码(例如),则在每次迭代中都会使用新的间隔覆盖interval
,从而中断clearInterval
调用,但最后一次setInterval
调用除外:
for (var i = 0; i < 3; i++) {
var interval = setInterval(function() {
if (true) {
clearInterval(interval);
console.log(1);
}
}, 100);
}
// ^ will give you one single console log entry,
// and two more console log entries per second forever
for(变量i=0;i<3;i++){
var interval=setInterval(函数(){
如果(真){
间隔时间;
控制台日志(1);
}
}, 100);
}
//^将为您提供一个控制台日志条目,
//每秒再增加两个控制台日志条目
这取决于执行此代码的范围
如果interval
在其范围内是唯一的(无论是全局范围还是功能范围),则这将按预期工作
但是,如果在循环中执行此代码(例如),则在每次迭代中都会使用新的间隔覆盖interval
,从而中断clearInterval
调用,但最后一次setInterval
调用除外:
for (var i = 0; i < 3; i++) {
var interval = setInterval(function() {
if (true) {
clearInterval(interval);
console.log(1);
}
}, 100);
}
// ^ will give you one single console log entry,
// and two more console log entries per second forever
for(变量i=0;i<3;i++){
var interval=setInterval(函数(){
如果(真){
间隔时间;
控制台日志(1);
}
}, 100);
}
//^将为您提供一个控制台日志条目,
//每秒再增加两个控制台日志条目
您的变量interval
似乎又在某处使用了。如果我运行您提供的代码,它将按预期工作。我猜用户Lightness对此给出了很好的解释,他还提供了一段代码,其中“闭包问题”很明显(这也导致了您的问题)。我只想补充一些额外的信息。如果希望代码在loop+setInteval中快速运行,可以执行以下操作:
for (var i = 0; i < 3; i++) {
var o = {
i: i,
interval: null,
timer: function() {
if (true) {
clearInterval(this.interval);
console.log(this.i);
}
}
};
o.interval = setInterval(o.timer.bind(o), 1000);
}
for(变量i=0;i<3;i++){
变量o={
i:我,
间隔:空,
计时器:函数(){
如果(真){
clearInterval(这个.interval);
console.log(this.i);
}
}
};
o、 间隔=设置间隔(o.timer.bind(o),1000);
}
我希望它对某些人有用。似乎您的变量
interval
又在某处使用了。如果我运行您提供的代码,它将按预期工作。我猜用户Lightness对此给出了很好的解释,他还提供了一段代码,其中“闭包问题”很明显(这也导致了您的问题)。我只想补充一些额外的信息。如果希望代码在loop+setInteval中快速运行,可以执行以下操作:
for (var i = 0; i < 3; i++) {
var o = {
i: i,
interval: null,
timer: function() {
if (true) {
clearInterval(this.interval);
console.log(this.i);
}
}
};
o.interval = setInterval(o.timer.bind(o), 1000);
}
for(变量i=0;i<3;i++){
变量o={
i:我,
间隔:空,
计时器:函数(){
如果(真){
clearInterval(这个.interval);
console.log(this.i);
}
}
};
o、 间隔=设置间隔(o.timer.bind(o),1000);
}
我希望它对某些人有用。似乎您的变量
interval
又在某处使用了。如果我运行您提供的代码,它将按预期工作。我猜用户Lightness对此给出了很好的解释,他还提供了一段代码,其中“闭包问题”很明显(这也导致了您的问题)。我只想补充一些额外的信息。如果希望代码在loop+setInteval中快速运行,可以执行以下操作:
for (var i = 0; i < 3; i++) {
var o = {
i: i,
interval: null,
timer: function() {
if (true) {
clearInterval(this.interval);
console.log(this.i);
}
}
};
o.interval = setInterval(o.timer.bind(o), 1000);
}
for(变量i=0;i<3;i++){
变量o={
i:我,
间隔:空,
计时器:函数(){
如果(真){
clearInterval(这个.interval);
console.log(this.i);
}
}
};
o、 间隔=设置间隔(o.timer.bind(o),1000);
}
我希望它对某些人有用。似乎您的变量
interval
又在某处使用了。如果我运行您提供的代码,它将按预期工作。我猜用户Lightness对此给出了很好的解释,他还提供了一段代码,其中“闭包问题”很明显(这也导致了您的问题)。我只想补充一些额外的信息。如果希望代码在loop+setInteval中快速运行,可以执行以下操作:
for (var i = 0; i < 3; i++) {
var o = {
i: i,
interval: null,
timer: function() {
if (true) {
clearInterval(this.interval);
console.log(this.i);
}
}
};
o.interval = setInterval(o.timer.bind(o), 1000);
}
for(变量i=0;i<3;i++){