Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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
对于(x=…;x<;=…;x+;+;)是否计算。。。在JavaScript的每个循环中?_Javascript_Loops_For Loop - Fatal编程技术网

对于(x=…;x<;=…;x+;+;)是否计算。。。在JavaScript的每个循环中?

对于(x=…;x<;=…;x+;+;)是否计算。。。在JavaScript的每个循环中?,javascript,loops,for-loop,Javascript,Loops,For Loop,如果我写 for (var x = Math.pow(2, 2); x <= Math.pow(2, 12.345); i++) doSomething(); for(var x=Math.pow(2,2);x第一个表达式是初始值,不会重新计算 显然,每次迭代都会对条件进行评估,否则您将不知道何时完成 是否必须重新计算条件表达式取决于表达式、JS实现及其JIT等。当表达式涉及函数调用时,优化器不太可能相信函数的返回值是不变的,并且函数没有副作用。因此,是的,这是可能的假设您的测试表达式在

如果我写

for (var x = Math.pow(2, 2); x <= Math.pow(2, 12.345); i++) doSomething();

for(var x=Math.pow(2,2);x第一个表达式是初始值,不会重新计算

显然,每次迭代都会对条件进行评估,否则您将不知道何时完成


是否必须重新计算条件表达式取决于表达式、JS实现及其JIT等。

当表达式涉及函数调用时,优化器不太可能相信函数的返回值是不变的,并且函数没有副作用。因此,是的,这是可能的假设您的测试表达式在每次迭代时都会被重新计算(请注意,初始化表达式只执行一次,所以将其移出循环头并没有多大意义)


这些手工编码的优化是否值得取决于具体情况。如果您的循环经历了很多次迭代,那么它可能是值得的,但花一些时间研究一个需要更少迭代的替代方案可能是明智的。

对循环的每一次迭代都进行条件检查

for (var x = Math.pow(2, 2); x <= Math.pow(2, 12.345); i++) doSomething();

现在,静态语句在初始化部分被移动,当循环执行开始时,它将只被计算一次。

否,将不计算Math.Pow。请参见:

>function z(){console.log("test"); return 3;}
<undefined

>z()
<3
<test

>var a = z();
<undefined
<test

>a
<3

这取决于编译器的优化。需要考虑的一个例子是:即使在单独的变量中声明数组的长度也会提高性能。哦,你刚才说的是第一个变量;你应该是明确的,因为有两个
Math.pow()
调用。至少我假设你只谈论第一个。
for (var x = Math.pow(2, 2), y = Math.pow(2, 12.345); x <= y; i++) doSomething();
>function z(){console.log("test"); return 3;}
<undefined

>z()
<3
<test

>var a = z();
<undefined
<test

>a
<3
>for (var x = 1; x <= z(); x++)console.log("itt");
<undefined
<test
<itt
<test
<itt
<test
<itt
<test