ホームページ ウェブフロントエンド jsチュートリアル JavaScript for ループの入り口からサイドまで (効率の最適化、奇妙な使い方)_JavaScript スキル

JavaScript for ループの入り口からサイドまで (効率の最適化、奇妙な使い方)_JavaScript スキル

May 16, 2016 pm 05:51 PM
for ループ

1. for ループの基本的な書き方
コードは次のとおりです。
コードをコピーします コードは次のとおりです。

//例 1 for(var i=1;ialert(i);

このコード 取り出すのが恥ずかしいくらい簡単です。コードの実行結果は、1 から 10 までが順番に表示されます。追記: IE6 などの初期の IE では、10 を 10000 に変更すると、ユーザーは何もできないことを確認するためにクリックし続けます。それは私のアイデアだったと言う。
これは基本的なコースなので、トピックに戻ってこのコードを詳しく分析してみましょう。
for ループの構造は似ています。どの for ループも次のようになります。
for (開始前; ループ実行の条件; ループ終了後の処理) {
// 本体コード
} for ループを詳しく見てみると、何千年も変わっていない特徴の 1 つがわかります。for! の後の () には常に 2 つだけ (英語のセミコロン) があります。上記の構造 コードでは、for ループの実行条件を区切るためにセミコロンが使用されることを説明しました。これらの条件は必須であり、空であってもかまいませんが、ポジションは予約されている必要があるため、2 つ存在する必要があります。
開始する前に: これは通常、例 1 の var i=0 など、いくつかの変数を宣言するために使用されます。これは、とりあえず何も入っていないバスケットを準備するようなものです。ツールの数に制限はなく、for ループが開始される前に 100 個の変数を宣言できます。見た目が良くないことを除けば、何も問題はありません。
ループが進行する条件: たとえば、最初の例の i1 回ループした後に行うこと: 例 1 では、単にバスケットに何かを追加するだけです。結局のところ、1 回ループするのは簡単ではありません。
特記事項: for ループの「開始前」のコードは 1 回のみ実行され、for ループ全体の効率には影響しません。ただし、「進行状況」と「終了後の処理」は影響を受けません。ループの実行回数によって決まるため、ループのパフォーマンスのボトルネックになることがよくあります。
for ループの最初の; が開始前に行われたものである場合、開始前の内容を for ループの先頭に持ってきてもよいでしょうか?開始する前に定義するだけです。答えは「はい」です:


//例 2
var i=0;
for(;ialert(i);


ただし、「開始」 「before」の後の括弧内の「」には内容がありませんが、; (セミコロン) はまだ存在します。そしてそれは必ずそこにあるはずです!
同様に、2回目以降のコードも1回実行されるので、forループの後に実行するコードを置くこともできます。次のように:



コードをコピー コードは次のとおりです: //例 3
var i= 0;
for(;ialert(i);
i
}


それでも、この 2 つは悪です。はまだ存在するはずです。
上記は基本的な「副用法」の 2 つです。 。 。不正行為だとは言わないでください
しかし、ご覧のとおり、ループを実行するための条件を個別に記述することはできず、条件は 2 つのセミコロンの間に置く必要があります。前からも後ろからも攻撃!

2. for ループの部分的な書き方

1. 例 1 のコードを次のように変更します。 ;alert (i )) ;どうやって?これは詐欺です。{} は消えました。しかし、それは絶対に正しいです! しかし、この書き方はあまりにも法外です。その 2。あまりにも多くのコードを含めないほうがよいでしょう。あまりにも多くなりすぎると、i の値を把握できなくなります。コードが複雑なため、人為的な文法エラーが発生する可能性があります。
適用環境:
要素が 1 から 1000 までの配列を作成するなど、単純な for ループ操作の場合は、このトリックを使用します。一言で言えばクールです。
2. 詳細な分析
前の例から、実際には、for ループの実行条件は次のようにブール値を判断することであることがわかります。 🎜>
コードをコピーします


コードは次のとおりです:

var t = true; if(t == true) { alert('Ah!') } この if ステートメントは誰も理解できません。実際には、次のように書くことができます:



コードをコピーします

コードは次のとおりです。

var t = true; if(t) { alert('Ah! ') }
for ループの条件がブール値を判定することであれば、次のような書き方も難しくありません。
Copy code コードは次のとおりです:

var i = 10;
for(;i;i--){
alert(i) ;
}

このコードの効果は、10 から 1 を順番にポップアップすることです (例 1 とは逆)。 for ループの条件は i と同じくらい単純ですが、前の説明によれば、条件は実際には次のようになります:
Copy code コードは次のとおりです:

if(i) {
//do
}

つまり、i が true の場合、続行します。実行サイクル。この for ループで i が true になるのはどのような場合ですか? i が 0、空の文字列、未定義、null、または false に等しくない限り、それは true になります。
つまり、この for ループは i=0 まで実行され、その後終了します。ただし、コードには 0 は表示されません。これにより、初心者が混乱し、B が武器としてインストールされます。
3、別の
まずはコードを見てみましょう。庭の友人のスナンディから:
コードをコピー コードは次のとおりです。次のように:

var ary = ["ジャック","トム","リリー","アンディ"]
for(var i=0,a;a=ary[i ];){
console.log(a);
}

さらに、for ループの条件に注意してください: a=ary[i]。 == ではなく = に特に注意してください。== の場合、ループは続行されません。
この条件判断はおかしいし、私も困惑しています。以下に似ています:
if(a=b) {...} // =! であることに注意してください。
このとき b が false の場合は false を返します。
上記の例に戻ると、i がヘッダーを追加すると、ary[i] に false の値 (null と未定義のカウントの両方) が含まれるため、条件が false になり、ループが中断されます。
snandy も述べたように、この例には大きな制限があります。たとえば、配列に 0 がある場合、ループが終了する可能性もあります。
4、jQueryの書き方
コードをコピー コードは次のとおりです。

function sibling( elem ) {
var r = [],
n = elem.parentNode.firstChild;
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n )
}
}


これ兄弟ノードを抽出する方法は、独自の for ループです。ループの条件は、n が true かどうかを判断することです。 n は常に HTML ノードであるため、常に true になります。各ループが終了すると、n の次のノードが n に割り当てられ、n の次のノードが存在しない場合、n は false となり、ループは終了します。
概要:
上記のすべての例からわかるように、for ループがどれほど奇妙であっても、2 つの; がなければ実行できません。 for ループの原理を理解したい場合は、for ループを ; を境にして分割すれば一目瞭然です。

3. for ループの効率の最適化
1. キャッシュ変数
これも最も一般的に使用される効率の最適化方法です:


コードをコピーします コードは次のとおりです。
var arr =[1,2,23,...,1000]; (var i=0, l = arr.length;i//
}


ループするたびに実行条件を判定する必要があるため、ifループするたびに arr から決定されます。 長さを読み取ることは間違いなく非常に無駄であり、必然的に計算量が増加し、効率が無駄になります。
2、逆順メソッド
たとえば、配列に 1000 個の要素がある場合、抽出順序を考慮しない場合は、逆順でループできます:



コードをコピーします コードは次のとおりです: var arr =[1,2,23,...,1000];
var i = arr.length;
for(; i>0;i--){
//alert(i);


なぜ逆順の方が順順よりも速いのでしょうか?科学的根拠はありません!実際、これは変数が 1 つ少ないだけで、(前の例と比較してください) 逆の順序で使用できるためです。これ以外には、2 つの変数の間に速度の違いはありません。
3.
の飛び出しに注意し、不要な操作を行わない これが基本ロジックです。 1,000 個の li がある場合、1 つの li には特別な className があり、この li を見つける必要があります。そして、そのような li は 1 つだけであることが決定されているので、この li を見つけたらすぐに飛び出て、ブレイクする必要があり、次のループを続ける必要はありません。このようにして、li が最後にならない確率は 999/1000 であるため、多くの計算を確実に節約できます。
その他の状況については、推測してください。
4. 横向きの使用法を使用する
上で紹介した横向きの使用法は、記述が美しいだけでなく、変数や計算を保存する効果があります。可能であれば使用してください。クールで効果的です。なぜそうではないのでしょうか?
---------------------------------概要----------- ------ ----------------
私は Javascript の柔軟性が好きです。それは見た目がかっこ良く見えるからだけではありません。ブログパークでJSの知識をもっと学びたいと思っています。専門家の記事をよく読んでとても勉強になりました。以下は私が庭で見つけた素晴らしい人々の一部です。リストに挙げていないとしても、私を罵らないでください。
cloudgamer、Situ Zhengmei、Uncle Tom、snandy、その他の控えめなマスター。彼らのブログを見つけたい場合は、検索してください。
追伸: Blog Park のコード挿入機能がとても気に入っています。今後、大量のコードを含む記事は Blog Park に直接投稿される予定です。
次のコードは試さないでください:
コードをコピーします コードは次のとおりです:

var arr = [1,2,23,1000];
for(var i=0,l = arr.length;iif(arr[i]>10000) ) {
i ;
}
}
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPを使用して100以内の奇数を見つける方法 PHPを使用して100以内の奇数を見つける方法 Dec 23, 2022 pm 06:54 PM

実装手順: 1. for ステートメントの制御範囲を使用して 1 から 100 までの数値を調べます。構文は「for ($i = 1; $i <= 100; $i++) {loop body code}」です。ループ本体はif文と%演算子を使って奇数を取得、出力するだけで、構文は「if($i % 2 != 0){echo $i.」「;}」となります。

PHPのforループの実行順序は何ですか? PHPのforループの実行順序は何ですか? Sep 22, 2021 pm 06:24 PM

実行シーケンス: 1.「初期化式」を実行 2.「条件判定式」を実行 式の値が真の場合は「ループ本体」を実行、そうでない場合はループ終了 3.ループ本体の実行後, 「変数更新式」を実行; 4. 変数更新後、条件判定値が false になるまで次のループに入り、ループを終了します。

mysqlにはforループがありますか? mysqlにはforループがありますか? Mar 30, 2023 pm 08:26 PM

MySQL には for ループがありません。MySQL は for ループ ステートメントをサポートしません。WHILE、REPEAT、LOOP の 3 つのループ ステートメントのみをサポートします。MySQL にはループ ステートメントが用意されており、条件に基づいて SQL コード ブロックを繰り返し実行できます。

JSループ学習:forループ文の使用(詳細例) JSループ学習:forループ文の使用(詳細例) Aug 03, 2022 pm 06:45 PM

前回の記事「JS ループの学習: While ループ ステートメントの使用 (詳細な例)」では、while ループと do while ループについて簡単に学習しましたが、今日は別のループである for ループ ステートメントを紹介します。誰にとっても役に立ちます。役に立ちました!

Pythonでのforループの使い方 Pythonでのforループの使い方 Oct 25, 2023 pm 12:18 PM

Python で for ループを使用する方法 Python はシンプルで使いやすいプログラミング言語であり、for ループは最も一般的に使用されるツールの 1 つです。 for ループを使用すると、一連のデータをループし、効果的な処理と操作を実行し、コードの効率を向上させることができます。以下では、Pythonでのforループの使い方を具体的なコード例を交えて紹介します。 for ループの基本構文 Python では、for ループの構文は次のとおりです。 反復可能なオブジェクトの for 変数:

Go で大きな配列を処理する: for 範囲または for ループを使用しますか? Go で大きな配列を処理する: for 範囲または for ループを使用しますか? Jul 24, 2023 pm 02:47 PM

Go の構文は比較的簡潔であることがわかっています。 C でサポートされている while、do...while などのループ制御構文は提供しませんが、for ループという 1 つのステートメントのみを保持します。

C言語でforループを使用して配列内の偶数と奇数を区切るにはどうすればよいですか? C言語でforループを使用して配列内の偶数と奇数を区切るにはどうすればよいですか? Aug 25, 2023 pm 03:09 PM

配列は、単一の名前で保存された関連するデータ項目のグループです。例: intStudent[30];//student は配列名で、単一の変数名を含む 30 個のデータ項目のコレクションです。 配列の操作検索 - 特定の要素が存在するかどうかを見つけるために使用されます。 並べ替え - 配列内の要素を配置するのに役立ちます。昇順または降順で並べ替えます。トラバーサル - 配列内の各要素を順番に処理します。挿入 - 配列に要素を挿入するのに役立ちます。削除 - 配列から要素を削除するのに役立ちます。配列内の要素。配列内で偶数を見つけるロジックは次のとおりです - for(i=0;i<size;i++){ if(a[i]%2==0){

for ループを使用して Go 言語で反転操作を実装する方法 for ループを使用して Go 言語で反転操作を実装する方法 Mar 24, 2024 pm 02:15 PM

タイトル: for ループを使用して Go 言語で反転操作を実装する方法 Go 言語では、for ループを使用することで配列やスライスなどのデータ構造を簡単に反転できます。この記事では、for ループを使用して配列とスライスを反転する方法と、具体的なコード例を紹介します。配列を反転する操作 まず、for ループを使用して配列を反転する方法を見てみましょう。整数要素を含む配列を定義し、for ループを使用して反転します。パッケージメイン

See all articles