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

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 までご連絡ください。
怎么用php实现求100以内的奇数怎么用php实现求100以内的奇数Dec 23, 2022 pm 06:54 PM

实现步骤:1、使用for语句控制范围来遍历1~100的数字,语法“for ($i = 1; $i <= 100; $i++) {循环体代码}”;2、在循环体中,利用if语句和“%”运算符获取并输出奇数即可,语法“if($i % 2 != 0){echo $i." ";}”。

PHP中for循环的执行顺序是什么PHP中for循环的执行顺序是什么Sep 22, 2021 pm 06:24 PM

执行顺序:1、执行“初始化表达式”;2、执行“条件判断表达式”,如果表达式的值为真,则执行“循环体”,否则结束循环;3、执行完循环体后,执行“变量更新表达式”;4、变量更新后,进入下一次循环,直到条件判断值为假,结束循环。

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循环是非常常用的工具之一。通过使用for循环,我们可以循环遍历一系列的数据,进行有效的处理和操作,提高代码的效率。下面,我将通过具体的代码示例,介绍如何使用Python中的for循环。基本的for循环语法在Python中,for循环的语法如下:for变量in可迭代对象:

mysql有for循环吗mysql有for循环吗Mar 30, 2023 pm 08:26 PM

mysql没有for循环,MySQL是不支持for循环语句的,只支持WHILE、REPEAT和LOOP三种循环语句,MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块。

Go 处理大数组:使用 for range 还是 for 循环?Go 处理大数组:使用 for range 还是 for 循环?Jul 24, 2023 pm 02:47 PM

我们知道,Go 的语法比较简洁。它并不提供类似 C 支持的 while、do...while 等循环控制语法,而仅保留了一种语句,即 for 循环。

如何使用C语言中的for循环将数组中的偶数和奇数分开?如何使用C语言中的for循环将数组中的偶数和奇数分开?Aug 25, 2023 pm 03:09 PM

数组是一组以单一名称存储的相关数据项。例如intStudent[30];//student是一个数组名,包含单个变量名的30个数据项集合数组的操作搜索-用于查找特定元素是否存在排序-它有助于排列数组中的元素按升序或降序排列。遍历-它按顺序处理数组中的每个元素。插入-它有助于在数组中插入元素。删除-它有助于删除数组中的元素。数组中的元素。在数组中查找偶数的逻辑如下-for(i=0;i<size;i++){&nbsp;&nbsp;if(a[i]%2==0){&nbsp;

如何使用C语言中的for循环打印用户选择的一个月份的日历?如何使用C语言中的for循环打印用户选择的一个月份的日历?Aug 28, 2023 pm 03:41 PM

Thelogictoprintaone-monthcalendarisasfollows&minus;for(i=1;i<first;i++)&nbsp;&nbsp;printf("");for(i=1;i<=noofdays;i++){&nbsp;&nbsp;printf("%3d",i);&nbsp;&nbsp;if((first+i-1)%7==0)&nbsp;&nb

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、