JavaScript のクロージャによって発生する問題を回避する

JavaScript のクロージャによって発生する問題を回避する

閉鎖による問題を回避するためのletについて

オブジェクト指向の考え方を使用して、購入者情報の削除機能を完成させます。各情報には次のものが含まれます。

名前 電話番号 都道府県

次の要件を実装します。
サードパーティのライブラリは使用できず、ネイティブ コードを使用する必要があります。
与えられた基本的なコード構造と組み合わせて、ここのコードの下の 2 つの場所にコードを追加して、購入者情報の削除機能を完成させます。このページは携帯電話で明確に表示する必要があることに注意してください。

js コードを任意に調整し、例えば es6 コードを使用して完成させることができます。

<!DOCTYPE html>
<html>
<ヘッド>
    <メタ文字セット="utf-8">
    <!--ここにコード-->
    <title>デモ</title>
    <スタイル>
        * {
            パディング: 0;
            マージン: 0;
        }

        .head、li div {
            表示: インラインブロック;
            幅: 70ピクセル;
            テキスト配置: 中央;
        }

        li .id、li .sex、.id、.sex {
            幅: 15px;
        }

        li .name, .name {
            幅: 40px;
        }

        li .tel、.tel {
            幅: 90ピクセル;
        }

        li .del、.del {
            幅: 15px;
        }

        ul {
            リストスタイル: なし;
        }

        .ユーザー削除{
            カーソル: ポインタ;
        }

    </スタイル>
</head>

<本文>
<div id="J_コンテナ">
    <div class="レコードヘッド">
        <div class="head id">シリアル番号</div>
        <div class="head name">名前</div>
        <div class="head sex">性別</div>
        <div class="head tel">電話番号</div>
        <div class="head Province">州</div>
        <div class="head">操作</div>
    </div>
    <ul id="J_リスト">
        <li>
            <div class="id">1</div>
            <div class="name">張三</div>
            <div class="sex">男性</div>
            <div class="tel">13788888888</div>
            <div class="province">浙江省</div>
            <div class="user-delete">削除</div>
        </li>
        <li>
            <div class="id">2</div>
            <div class="name">李思</div>
            <div class="sex">女性</div>
            <div class="tel">13788887777</div>
            <div class="province">四川省</div>
            <div class="user-delete">削除</div>
        </li>
        <li>
            <div class="id">3</div>
            <div class="name">王二</div>
            <div class="sex">男性</div>
            <div class="tel">13788889999</div>
            <div class="province">広東省</div>
            <div class="user-delete">削除</div>
        </li>
    </ul>
</div>

<スクリプト>
    // ここでも ES6 を使用できます function Contact() {
        これを初期化します。
    }

    // ここにコードを記述
</スクリプト>
</本文>
</html>

コード1

<meta name="viewport" content="width = デバイス幅、初期スケール=1">

code2 (他の人のコード)

 Contact.prototype.init = 関数(){
        console.log("テスト");
        var div = document.getElementsByClassName("user-delete");
        var ul = document.querySelector("#J_List");
        var list = ul.querySelectorAll("li");

        (var i = 0; i < div.length; i++) の場合 {
            (関数 (i) {
                div[i].onclick = 関数(){
                    リスト[i].remove();
                    コンソールにログ出力します。
                }
            })(私);
        }
    }

    新しい連絡先();

 (関数 (i) {
                div[i].onclick = 関数(){
                    リスト[i].remove();
                    コンソールにログ出力します。
                }
            })(私);

この即時実行機能の意味が分かりません

私のコード

 Contact.prototype.init = 関数(){
        div を document.getElementsByClassName("user-delete"); に設定します。
        ul = document.querySelector("#J_List"); とします。
        リストを ul.querySelectorAll("li") にします。

        for (let i in div) {
            div[i].onclick = 関数(){
                リスト[i].remove();
                コンソールにログ出力します。
            }
        }
    }

    新しい連絡先();

後で思い出しましたが、これはクロージャによって引き起こされる問題を回避するためでした。Liao Xuefeng先生がこのことについて話されていましたが、その時は思い出せませんでした。詳しくは、Liao Xuefengのクロージャを参照してください。ただし、当時はブロックレベルのスコープがなかったため、コードを実行しても問題はありませんでした。しかし、今ではletを使用してこの問題を回避できます。したがって、i が let を使用して宣言されている場合、関数をすぐに実行する必要はありません。また、コードを書くときは、var の使用を避け、代わりに let を使用する必要があります。もう 1 つは、for(let i =0;condition;++i) のようなステートメントの使用を避け、for...in... を使用するようにすることです。良い習慣を身につける必要があります。

これで、JavaScript の let クロージャによって発生する問題を回避する方法についての記事は終了です。JavaScript の let クロージャの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript における関数のネスト
  • 1つの記事でJavaScriptのクロージャ関数について学ぶ
  • JavaScript クロージャの説明
  • Javascript のスコープとクロージャの詳細
  • JS の難しさ 同期と非同期、スコープとクロージャ、プロトタイプとプロトタイプ チェーンの詳細な説明
  • JavaScript のクロージャの問題の詳細な説明
  • JavaScript 関数の使用方法の詳細な説明 [関数の定義、パラメータ、バインディング、スコープ、クロージャなど]
  • js における関数のネストとクロージャの詳細

<<:  MySQL における := と = の違いをグラフィカルに紹介

>>:  Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。

推薦する

メタタグを簡単に説明すると

META タグは、一般的に タグと呼ばれ、HTML Web ページのソース コード内の重要な HTM...

JS 開発効率を上げる4つの超実践的なヒント

目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...

ウェブページを作成する際に注意すべき点

--ホームページのバックアップ1.txtテキスト2. 画像をスキャンする3. PSDデザイン原画(A...

MySQL での find_in_set() 関数の使用に関する詳細な説明

まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...

ローカル写真をアップロードする前にプレビューコード例を実装するための HTML5 と jQuery

HTML5 と jQuery はアップロード前にローカル画像のプレビューを実装しており、その効果は...

Reactの二次連携を実現する方法

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...

プロジェクトにおけるVue3のロジック抽出とフィールド表示についての簡単な説明

目次論理階層化異なる地域から事業を分離するこれを実行する利点このようなシナリオにどう対処するか最適化...

Linux LVM 論理ボリューム構成プロセス (作成、増加、削減、削除、アンインストール) の詳細な説明

Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...

jsを使用して中国語からピンインへの変換の完全な手順を実行します

jsを使用して、中国語をピンインに変換するパッケージを作成しました。倉庫のアドレスはpinyin-p...

jQuery キャンバスで画像検証コード例を描画する

この記事では、jQuery Canvasの描画画像検証コードの具体的なコードを例として紹介します。具...

Vue は携帯電話の認証コードによるログインを実装します

この記事では、携帯電話認証コードログインを実装するためのVueの具体的なコードを参考までに共有します...

MySQL インポート csv エラーの 4 つの解決策

これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...

CSSプロパティに基づいたボタンホバーボーダーと背景アニメーションのコレクション

ハートの属性不透明度: .999 は要素のスタッキングコンテキストを作成し、ボタン6と8のアニメーシ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

Vue はウェブページの言語切り替えの国際化を実装します

1. 基本的な手順1: yarn add vue-i18nをインストールするこのパスに新しい .js...