Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不应该';我不能用Javascript在循环中生成函数吗?_Javascript_Function_Loops - Fatal编程技术网

为什么不应该';我不能用Javascript在循环中生成函数吗?

为什么不应该';我不能用Javascript在循环中生成函数吗?,javascript,function,loops,Javascript,Function,Loops,前几天我用JSFiddle检查了一下,在其中一行上得到了警告:不要在循环中生成函数 (x=0;x瞬间(那时)){ doIt(x);//现在就做 }否则{ timeTillEnd=瞬间(当时)-瞬间(现在); setTimeout(函数(){ doIt(x);//以后再做 },timeTillEnd);//您试图执行的操作可能是错误的,x变量可能不是您期望的。请参阅以下链接: 而且它们的制作成本也相对较高 每个函数都带有它所使用的变量的闭包,如果您正在进行“普通命令式编程”,并且只想通过定义子

前几天我用JSFiddle检查了一下,在其中一行上得到了警告:
不要在循环中生成函数


(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

    }
}