0

だから私はなぜ次のコードが機能しないのか疑問に思っています。forループを変数に入れるための同様の戦略を探しています。

var whatever = for (i=1;i<6;i++) {
console.log(i)
};

ありがとう!

4

4 に答える 4

5

forループはステートメントであり、JavaScriptではステートメントに値がないためです。これは、言語の構文とセマンティクスで提供されているものではありません。

一部の言語では、すべてのステートメントが式として扱われます(Erlangなど)。他の人では、そうではありません。JavaScriptは後者のカテゴリにあります。

それは、なぜ馬に長い糸状の尾があり、翼がないのかを尋ねるようなものです。

編集—アンダースコアライブラリや、「map」、「reduce」、「forEach」機能のアレイプロトタイプへの「モダン」アドオンなどを調べます。これらは、式の評価コンテキストでの反復操作を可能にします(もちろんコストがかかります)。

于 2012-06-19T20:59:57.327 に答える
2

私はあなたが探しているのは関数だと思います:

var whatever = function(min, max) {
  for (var i = min; i < max;  ++i) {
    console.log(i);
  }
}

... 以降 ...

whatever(1, 6);

このアプローチにより、ループ(または他のコード、さらには別の関数を宣言するコード)を変数内にカプセル化できます。

于 2012-06-19T21:03:33.160 に答える
0

問題は、forループが値を返さないことです。ループのすべての反復を保持するのに十分な要素を含む配列を作成し、ループ内でそれに割り当てることができます。

arry[j++] = i;
于 2012-06-19T21:01:23.160 に答える
0

これは可能ですが、無名関数を確認することをお勧めします。匿名関数を使用すると、これを行うことができます:

var whatever = function(){
 for (var i=1;i<6;i++) {
  console.log(i);
 }
};

その後

whatever(); //runs console.log(i) i times.
于 2012-06-19T21:11:00.947 に答える