js 変数スコープを使用するときに発生するバグ

php中世界最好的语言
リリース: 2018-05-24 15:57:13
オリジナル
1813 人が閲覧しました
for (var i = 0; child && i < child.length; i++) {
            var obj = child[i];
            var kind = child[i].kind;
            var deiveId = child[i].id;
            if (kind == "4") {//分支1
                 // do sometjing
            }else{//分支2
                for(i in arr){
                   //do something
                }
            }
ログイン後にコピー

上記のコードは、表面的には非常に奇妙に見える問題を作成します。ブランチ 2 = 4 の場合、外側の for ループが戻ることがあります。つまり、最も外側のループが明らかに最後の子に到達した後、外側の for ループが実行に戻ります。

原因分析:

私ほど悪くない専門家なら、問題は変数
iにあることがわかると思います。ここで、iはブロックレベルの変数ではなく、関数レベルになります。ブランチ 2 の変更により、外側の層 i が変更され、ループがループバックします。 ES6 より前の js にはブロック レベルのスコープがなく、グローバル スコープと関数レベルのスコープにのみ分割されていました。ここで i は関数レベルのスコープであり、それを使用してループ index
を作成するとき、実際には次のことを行います。それをブロックレベルのスコープの使用として扱います。

解決策

ブロックレベルのスコープ効果を実現したい場合は、ES6 構文の let キーワードを使用できます:

for(let i=0;i<arr.length;i++){
}
ログイン後にコピー

この記事のケースを読んだ後は、この方法を習得したと思います。内容については、PHP 中国語 Web サイトにご注意ください

その他

関連記事! 推奨読書:

一般的に使用される CSS スタイルの概要

Component と PureComponent の使用の違いの詳細な説明


以上がjs 変数スコープを使用するときに発生するバグの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート