JavaScript 関数のコンテキストのルールは何ですか?

JavaScript 関数のコンテキストのルールは何ですか?

1. ルール 1: Object.Method()

對象.方法()
オブジェクトがドット化され、そのメソッド関数が呼び出されると、関数のコンテキストはドット化されたオブジェクトになります。

1.1 ケース1

関数fn() {
    コンソールにログ出力します。
}
var obj = {
    66,
    b: 33,
    注釈: 注釈
}
obj.fn();

出力:

99

1.2 ケース2

var obj1 = {
    66,
    b: 33,
    fn:関数(){
        コンソールにログ出力します。
    }
}
var obj2 = {
    66,
    b: 33,
    引数: obj1.fn
}
obj2.fn();

出力:

7

1.3 ケース3

関数outer() {
    var a = 11;
    var b = 22;
    戻る {
        33,
        b: 44,
        fn:関数(){
            コンソールにログ出力します。
        }
    }
}
外側のfn();

出力:

77

1.4 ケース4

関数fun() {
    コンソールにログ出力します。
}
var obj = {
    a: 1、b: 2、c: [{ a: 3、b: 4、c: 楽しい }]
};
var a = 5;
obj.c[0].c();

出力:

7

2. ルール 2: Function()

函數()
括弧は関数を直接呼び出し、関数のコンテキストはウィンドウ オブジェクトです。

2.1 ケース1

var obj1 = {
    a: 1、b: 2、fn: 関数 () {
        コンソールにログ出力します。
    }
}
var a = 3;
var b = 4;
var fn = obj1.fn;
関数fn();

出力:

7

2.2 ケース2

関数fun() {
    this.a + this.b を返します。
}
var a = 1;
var b = 2;
var obj = {
    a: 3, 
    b: fun(), // ルール2を適用
     楽しい:楽しい
}
var result = obj.fun(); // ルール1が適用される
console.log(結果);

出力:

6

3. ルール3: 配列の添え字

數組下標
配列(配列のようなオブジェクト)は呼び出しのための関数を列挙し、コンテキストはこの配列(配列のようなオブジェクト)です。

3.1 ケース1

var arr = ['A', 'B', 'C', 関数() {
    コンソールにログ出力します。
}];
ar[3]();

出力:

3.2 ケース2

関数fun() {
    引数[3]();
}
fun('A', 'B', 'C', 関数() {
    コンソールにログ出力します。
});

出力:

B

4. ルール4: IIFE

(function(){})();
IIFE (即時実行可能関数) 内の関数のコンテキストは、ウィンドウ オブジェクトです。

4.1 ケース1

var a = 1;
var obj = {
    a: 2、
    楽しい: (関数() {
        var a = this.a; // ルール1が適用される
        return function () { // ルール4が適用される
            console.log(a + this.a); // 2+1
        }
    })()
};
obj.fun();

出力:

3

5. ルール5: タイマーと遅延

setInterval(函數,時間);
setTimeout(函數,時間);
タイマーおよび遅延呼び出し関数は、ウィンドウ オブジェクトをコンテキストとして使用します。

5.1 ケース1

var obj = {
    a: 1、b: 2、関数() {
        コンソールにログ出力します。
    }
}
var a = 3;
var b = 4;
setTimeout(obj.fun, 2000); // ルール5が適用される

出力:

7

5.2 ケース2

var obj = {
    a: 1、b: 2、関数() {
        コンソールにログ出力します。
    }
}
var a = 3;
var b = 4;
setTimeout(関数() {
	obj.fun(); //ルール1を適用
}, 2000);

出力:

3

6. ルール6: イベント処理関数

DOM元素.onclick = function(){};
イベント ハンドラーのコンテキストは、イベントがアタッチされた DOM 要素です。

6.1 ケース1

次の効果を実現してください: クリックされたボックスはどれも赤に変わります。これを実現するには、同じイベント処理関数を使用する必要があります。

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <title>ルール 6: イベント処理関数</title>
    <スタイル>
        * {
            マージン: 0;
            パディング: 0;
        }

        本体div{
            フロート: 左;
            幅: 100ピクセル;
            高さ: 100px;
            右マージン: 10px;
            境界線: 1px実線 #000;
        }
    </スタイル>
</head>

<本文>
    <div id="box1">1</div>
    <div id="box2">2</div>
    <div id="box3">3</div>
    <スクリプト>
        関数 changeColor() {
            this.style.backgroundColor = '赤';
        }
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var box3 = document.getElementById('box3');
        box1.onclick = 色を変更します。
        box2.onclick = 色を変更します。
        box3.onclick = 色を変更します。
    </スクリプト>
</本文>

</html>

結果:

ここに画像の説明を挿入

6.2 ケース2

次の効果を実現してください: ボックスをクリックすると、2000 ミリ秒後にボックスが赤くなります。これを実現するには、同じイベント処理関数が必要です。

ケース 1 との違い: バックアップ コンテキストが必要です。

関数 changeColor() {
    var self = this; // バックアップコンテキスト setTimeout(function () {
        self.style.backgroundColor = '赤';
    }, 2000);
}
var box1 = document.getElementById('box1');
var box2 = document.getElementById('box2');
var box3 = document.getElementById('box3');
box1.onclick = 色を変更します。
box2.onclick = 色を変更します。
box3.onclick = 色を変更します。

JavaScript 関数のコンテキスト ルールに関するこの記事はこれで終わりです。JavaScript 関数のコンテキスト ルールの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript 関数構文の説明
  • JavaScript 関数型プログラミングの基礎
  • JavaScript 基礎シリーズ: 関数とメソッド
  • JavaScript es6 における var、let、const の違いの詳細な説明

<<:  Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明

>>:  HTML チュートリアル: HTML 水平線分

推薦する

VUE ユニアプリの条件付きコーディングとページレイアウトに関する簡単な説明

目次条件付きコンパイルページレイアウト要約する条件付きコンパイル条件付きコンパイルでは、特別なコメン...

Mac で MySQL バージョン 5.6 のパスワードを設定する方法

MySQLはインストール時に設定できますが、それより低いバージョンは設定できないようで、インストール...

Linux でスレッドを作成するための pthread_create の具体的な使用法

pthread_create関数機能紹介pthread_createはUNIX環境のスレッド作成関数...

MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...

Linux で binlog ファイルの作成時間を表示するコマンド

目次背景分析する方法背景MySQL は 26 日の 16:23:49 に大量のスロー クエリを生成し...

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

この記事では、CSSのようなJSモジュールをインポートする方法を説明します。

目次序文構築可能なスタイルシートとは何ですか? CSSモジュールスクリプトの使用インポートアサーショ...

HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

方法1: CSSオーバーフロー省略を使用して解決する解決策は次のとおりです。 CSSコード: ディス...

HTML スタイル タグと関連する CSS リファレンスの詳細な説明

HTML スタイル タグスタイルタグ - ドキュメント内でスタイルを宣言するときにこのタグを使用しま...

MySQLのレプリケーションの詳細な分析

1.MySQLレプリケーションの概念これは、プライマリ データベースの DDL および DML 操作...

動的テーブルを実装するための要素サンプルコード

目次【コード背景】 【コード実装】 #1# -> コード再利用の基本は、再利用可能なコンポーネ...

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

WeChatミニプログラムのすべてのページがログインされていることを確認する方法

目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...

mysql の追加、削除、変更、クエリの基本ステートメント

文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...