我试过了,它总是显示1次,有问题,如何解决?
function myFunc() {
var increment = (function() {
var i = 0;
return function() {
i++;
return i;
};
})();
alert(`calling myFunc ${increment()} times`);
}
任何时候调用我的func,它都会重新定义增量函数,所以你不应该期望它只说1
。您的问题是每次调用myFunc
时都定义了增量
你想做的是:
var i = 0;
function myFunc() {
var increment = (function() {
return function() {
i++;
return i;
};
})();
alert(`calling myFunc ${increment()} times`);
}
因此,现在i
将在对myFunc
的调用之间保持其值。它必须在myFunc
之外。或者,您可以将整个函数移动到myFunc
之外。
var increment = (function() {
var i = 0;
return function() {
i++;
return i;
};
})();
function myFunc() {
alert(`calling myFunc ${increment()} times`);
}
现在这个工作:
console.log(increment()); // logs 1
console.log(increment()); // logs 2
问题是,当一个变量超出作用域时,它会被销毁,下次调用值时,它将被重新创建,并初始化为它开始时的任何值。由于变量i
的作用域在increment
函数内部,它本身的作用域是CCD_ 9,这意味着当CCD_。
一个示例显示i
被提升到myFunc
的作用域中,并且increment
函数运行了几次。
function myFunc() {
console.log('running myFunc');
var i = 0;
console.log('assigning i to ' + i);
function increment() {
console.log('incrementing');
i++;
};
increment();
increment();
console.log(`calling myFunc ${i} times`);
}
myFunc();
请注意,i
现在在对increment
的调用中保持其状态。现在,当我们多次调用myFunc
时,我们看到i
被破坏,然后当myFunc
再次运行时,会创建一个新的变量。
function myFunc() {
console.log('running myFunc');
var i = 0;
console.log('assigning i to ' + i);
function increment() {
console.log('incrementing');
i++;
}
increment();
increment();
console.log(`calling myFunc ${i} times`);
}
myFunc();
myFunc();
现在,如果我们将i
提升到myFunc
的范围之上,我们将看到它的值在对myFunc
的调用中保持在范围内。
var i = 0;
console.log('assigning i to ' + i);
function myFunc() {
console.log('running myFunc');
function increment() {
console.log('incrementing');
i++;
}
increment();
console.log(`calling myFunc ${i} times`);
}
myFunc();
myFunc();
适用于我。
var increment = (function() {
var i = 0;
return function() {
i++;
return i;
};
})();
console.log(increment());
console.log(increment());
console.log(increment());