为什么不应该';我不能用Javascript在循环中生成函数吗?
前几天我用JSFiddle检查了一下,在其中一行上得到了警告:为什么不应该';我不能用Javascript在循环中生成函数吗?,javascript,function,loops,Javascript,Function,Loops,前几天我用JSFiddle检查了一下,在其中一行上得到了警告:不要在循环中生成函数 (x=0;x瞬间(那时)){ doIt(x);//现在就做 }否则{ timeTillEnd=瞬间(当时)-瞬间(现在); setTimeout(函数(){ doIt(x);//以后再做 },timeTillEnd);//您试图执行的操作可能是错误的,x变量可能不是您期望的。请参阅以下链接: 而且它们的制作成本也相对较高 每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子
不要在循环中生成函数
(x=0;x<10;x++)的
{
如果(瞬间(现在)>瞬间(那时)){
doIt(x);//现在就做
}否则{
timeTillEnd=瞬间(当时)-瞬间(现在);
setTimeout(函数(){
doIt(x);//以后再做
},timeTillEnd);//您试图执行的操作可能是错误的,x
变量可能不是您期望的。请参阅以下链接:
而且它们的制作成本也相对较高
每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子任务的内部函数使代码看起来更清晰,则这是一种不必要的开销:
在您的情况下,似乎您实际上需要一个函数及其闭包,因为您推迟了一些计算,但请确保您执行了正确的值捕获。您尝试执行的操作可能是错误的,x
变量可能不是您期望的。请参阅以下链接:
而且它们的制作成本也相对较高
每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子任务的内部函数使代码看起来更清晰,则这是一种不必要的开销:
在您的情况下,似乎您实际上需要一个函数及其闭包,因为您推迟了一些计算,但请确保您执行了正确的值捕获。您尝试执行的操作可能是错误的,x
变量可能不是您期望的。请参阅以下链接:
而且它们的制作成本也相对较高
每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子任务的内部函数使代码看起来更清晰,则这是一种不必要的开销:
在您的情况下,似乎您实际上需要一个函数及其闭包,因为您推迟了一些计算,但请确保您执行了正确的值捕获。您尝试执行的操作可能是错误的,x
变量可能不是您期望的。请参阅以下链接:
而且它们的制作成本也相对较高
每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子任务的内部函数使代码看起来更清晰,则这是一种不必要的开销:
在您的情况下,似乎您实际上需要一个函数及其闭包,因为您正在推迟一些计算,但请确保您执行了正确的值捕获。因为它可能导致意外的闭包行为(捕获的变量将在循环的最后一次迭代中指定值)。对于每个浪费资源的循环,您还将获得一个新的函数实例
现代浏览器采用setTimeout的第三个参数,该参数是函数的参数。请参阅。这也解决了闭包问题。因为它可能导致意外的闭包行为(捕获的变量将在循环的最后一次迭代中赋值)。对于每个浪费资源的循环,您还将获得一个新的函数实例
现代浏览器采用setTimeout的第三个参数,该参数是函数的参数。请参阅。这也解决了闭包问题。因为它可能导致意外的闭包行为(捕获的变量将在循环的最后一次迭代中赋值)。对于每个浪费资源的循环,您还将获得一个新的函数实例
现代浏览器采用setTimeout的第三个参数,该参数是函数的参数。请参阅。这也解决了闭包问题。因为它可能导致意外的闭包行为(捕获的变量将在循环的最后一次迭代中赋值)。对于每个浪费资源的循环,您还将获得一个新的函数实例
现代浏览器使用setTimeout的第三个参数,这是函数的参数。请参阅。这也解决了闭包的问题。x
不是您想象的那样。因为JavaScript只有函数作用域,每个函数都引用同一个变量x
。那么您可能知道这个问题的答案;@FelixKlingJust看,答案都在那里。x
不是你想象的那样。因为JavaScript只有函数作用域,每个函数都引用同一个变量x
。那么你可能知道答案;@FelixKlingJust看,答案都在那里。x
不是你想象的那样。因为JavaScript只有函数作用域,每个函数都引用同一个变量x
。那么你可能知道答案;@FelixKling看看,答案都在那里。x
不是你想象的那样。因为JavaScript只有函数作用域,每个函数都引用同一个变量x代码>。那么你可能知道;@FelixKlingJust看,答案都在那里。那不是(主要的)原因。你有我能读到的这个声明的任何来源吗?我仍然相信这不是jslint生成此警告的原因。我的意思是,应该清楚的是,一个函数使用的内存少于1000个函数。但数组、对象、字符串、数字,以及任何类型的数据也是如此。(好吧,这个答案顶部的新理由对我来说更有意义。然而,生活仍然是“maki”
for (x = 0; x < 10; x++) {
if (moment(now) > moment(then)) {
doIt(x); // do it now
} else {
timeTillEnd = moment(then) - moment(now);
setTimeout(function () {
doIt(x); // do it later
}, timeTillEnd); // <-- flagged here
}
}