JSクロージャの特徴分析

Mar 06, 2018 pm 01:55 PM
javascript 分析する 特性

bodyタグ内にidノードを持つuタグを追加し、ulタグの下にliタグが5つあります。別の li タグをクリックしたときに li 添字をポップアップするにはどうすればよいですか?
1) まず、ul ノードを取得する必要があります var node = document.getElementsById('node')
2) ノードの下の子ノードを取得します node var list = node.children
**3) onclick イベントを子に追加しますループ内のノード (クロージャの問題が発生することに注意してください)。 for(var i=0;ilist[i].onclick = function()console.log(i)}} の出力は 7 であることがわかります。時間。 **
4) 出力 7 を分析します。i は var を使用してグローバル変数として宣言されているため、同じアドレスを指します。ループの実行後、i の値は 7 なので、各ループで出力される結果は 7 になります
これを解決するには 2 つの方法を使用します。1) ブロックレベルのスコープ変数を宣言し、渡すたびに let j = i を使用します。私は受け取ります 。

let j = i; 
list[i].onclick = function(){console.log(j)}
ログイン後にコピー

function メソッドでは、ブロックレベル変数 j が呼び出されます。この変数はガベージ コレクションされません。各 for ループは異なるアドレスを指すため、クリック イベントがトリガーされると、その添え字が正しく出力されます。 2) クロージャを使用して問題を解決します。

list[i].onclick = function(i){ 
return function(){console.log(i)}。 
}
ログイン後にコピー

**クロージャの解釈
クロージャは、他の関数の内部変数を読み取ることができる関数です。 JavaScript 言語では、関数内のサブ関数のみがローカル変数を読み取ることができます。クロージャは、単純に「関数内で定義された関数」として理解できます。基本的に、クロージャは関数の内部と関数の外部を接続するブリッジです。

注: クロージャを使用すると、関数内の変数がメモリに保存され、大量のメモリを消費します。そのため、Web ページでパフォーマンスの問題が発生したり、IE ブラウザでメモリ リークが発生したりする可能性があるクロージャを悪用することはできません。 。 。最後の解決策は、関数を終了する前に未使用のローカル変数をすべて削除することです。

他の人の例を使用します。ご参考までに

var name = "this window";
var object = {
    name :"my object",
    getNameFunc:function () {
        return function () {
            return this.name;
        }
    }
}
alert(object.getNameFunc()());/弹出this window2 。此时this对象指向window对象
var object2 = {
    name: "my object",
    getNameFunc2: function () {
        var that = th is;
        return function () {
            return that.name;
        }
    }
}
alert(‘that’+object2.getNameFunc2()()); ///弹出my object。此时this对象指向object2对象
ログイン後にコピー

関連する推奨事項:

JS クロージャの簡単な理解

JS クロージャの一般的な形式の詳細な説明

JS クロージャの使用方法のサンプル コード共有

以上がJSクロージャの特徴分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

DreamWeaver CMS のセカンダリディレクトリを開けない原因の分析 DreamWeaver CMS のセカンダリディレクトリを開けない原因の分析 Mar 13, 2024 pm 06:24 PM

タイトル: DreamWeaver CMS のセカンダリディレクトリを開けない原因と解決策の分析 Dreamweaver CMS (DedeCMS) は、さまざまな Web サイトの構築に広く使用されている強力なオープンソースのコンテンツ管理システムです。ただし、Web サイトの構築中に、セカンダリ ディレクトリを開けない状況が発生し、Web サイトの通常の動作に問題が発生することがあります。この記事では、セカンダリ ディレクトリを開けない考えられる理由を分析し、この問題を解決するための具体的なコード例を示します。 1. 考えられる原因分析: 疑似静的ルール構成の問題: 使用中

Golang にはクラスのようなオブジェクト指向機能はありますか? Golang にはクラスのようなオブジェクト指向機能はありますか? Mar 19, 2024 pm 02:51 PM

Golang (Go 言語) には伝統的な意味でのクラスの概念はありませんが、構造体と呼ばれるデータ型が提供され、これによってクラスと同様のオブジェクト指向機能を実現できます。この記事では、構造体を使用してオブジェクト指向機能を実装する方法を説明し、具体的なコード例を示します。構造体の定義と使用法 まず、構造体の定義と使用法を見てみましょう。 Golang では、type キーワードを通じて構造を定義し、必要に応じて使用できます。構造には属性を含めることができます

ニーズと機能に基づいて、該当する Go バージョンを選択してください ニーズと機能に基づいて、該当する Go バージョンを選択してください Jan 20, 2024 am 09:28 AM

インターネットの急速な発展に伴い、プログラミング言語は常に進化し、更新されています。中でもGo言語はオープンソースのプログラミング言語として近年注目を集めています。 Go 言語は、シンプル、効率的、安全で、開発とデプロイが簡単になるように設計されています。高い同時実行性、高速なコンパイル、メモリの安全性などの特徴を備えており、Web開発、クラウドコンピューティング、ビッグデータなどの分野で広く使用されています。ただし、現在、Go 言語のさまざまなバージョンが利用可能です。適切な Go 言語バージョンを選択するときは、要件と機能の両方を考慮する必要があります。頭

Tencent の主要なプログラミング言語が Go であるかどうかを分析する Tencent の主要なプログラミング言語が Go であるかどうかを分析する Mar 27, 2024 pm 04:21 PM

タイトル: テンセントの主要なプログラミング言語は Go ですか: 詳細な分析 中国の大手テクノロジー企業として、テンセントはプログラミング言語の選択において常に多くの注目を集めてきました。近年、テンセントは主に Go を主要なプログラミング言語として採用していると考える人もいます。この記事では、Tencent の主要なプログラミング言語が Go であるかどうかについて詳細な分析を行い、この見解を裏付ける具体的なコード例を示します。 1. Tencent における Go 言語の適用 Go は、Google によって開発されたオープンソースのプログラミング言語であり、その効率性、同時実行性、シンプルさにより多くの開発者に愛されています。

静的測位技術の長所と短所を分析する 静的測位技術の長所と短所を分析する Jan 18, 2024 am 11:16 AM

静的測位技術の利点と限界の分析 現代の科学技術の発展に伴い、測位技術は私たちの生活に欠かせないものになりました。その 1 つとして、静的測位テクノロジには独自の利点と制限があります。この記事では、静的測位技術の詳細な分析を実施して、現在の応用状況と将来の開発傾向をより深く理解します。まず、静的測位技術の利点を見てみましょう。静的測位技術は、位置決め対象の物体を観察、測定、計算することで位置情報を決定します。他の測位技術と比較して、

Tomcat がクラッシュする理由を分析して解決する Tomcat がクラッシュする理由を分析して解決する Jan 13, 2024 am 10:36 AM

Tomcat クラッシュの原因分析と解決策 はじめに: インターネットの急速な発展に伴い、サービスを提供するためにサーバー上に展開されるアプリケーションがますます増えています。 Tomcat は、一般的な JavaWeb サーバーとして、アプリケーション開発で広く使用されています。ただし、Tomcat のクラッシュに関する問題が発生し、アプリケーションが適切に実行されなくなる場合があります。この記事では、Tomcat クラッシュの原因の分析を紹介し、解決策を提供し、具体的なコード例を示します。

C++ 関数の種類と特性 C++ 関数の種類と特性 Apr 11, 2024 pm 03:30 PM

C++ 関数には、単純関数、const 関数、静的関数、および仮想関数というタイプがあり、インライン関数、デフォルト パラメーター、参照戻り値、およびオーバーロードされた関数などの機能が含まれます。たとえば、calculateArea 関数は π を使用して、指定された半径の円の面積を計算し、それを出力として返します。

Golang ミドルウェアの主要な機能とアプリケーション シナリオをマスターする Golang ミドルウェアの主要な機能とアプリケーション シナリオをマスターする Mar 20, 2024 pm 06:33 PM

Golang は高速で効率的なプログラミング言語として、Web 開発の分野でも広く使用されています。その中でも、ミドルウェアは重要な設計パターンであり、開発者がコードをより適切に整理および管理し、コードの再利用性と保守性を向上させるのに役立ちます。この記事では、Golang のミドルウェアの主な機能とアプリケーション シナリオを紹介し、具体的なコード例を通じてその使用法を説明します。 1. ミドルウェアの概念と機能 ミドルウェアはプラグイン コンポーネントとして、アプリケーションの要求と応答の処理チェーンに配置され、使用されます。

See all articles