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+ElementUI Treeの使い方

Vue+ElementUI Treeの使い方は参考までに。具体的な内容は以下のとおりです。 フロント...

Kylin 4.0.2 (Ubuntu) でブート パーティションを拡張するプロセスの紹介

目次序文1. 新しいパーティションを準備する2. ブートパーティションをコピーする3. fstabフ...

同期スクロールを実現するための複数のテーブル要素のサンプルコード

Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

データベースを削除せずにMySQLのすべてのテーブルを素早く削除する方法

この記事では、例を使用して、データベースを削除せずに MySQL 内のすべてのテーブルをすばやく削除...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...

ナビゲーションデザインと情報アーキテクチャ

<br />ナビゲーションについて話すときは、ほとんどの場合、ナビゲーションがコンテンツ...

MySQL 8.0.12 のインストールと環境変数の設定チュートリアル (Win10 の場合)

Windows 10 プラットフォームでの MySQL のインストール、構成、起動、ログイン、環境...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

ネイティブ JavaScript を使用して計算機のサンプル コードを開発する

計算機の主な機能は数値計算を実行することです。計算機機能の Web インスタンスを開発すると、js ...

HTML テキストフォーマットの簡単な例 (詳細な説明)

1. テキストの書式設定: この例では、HTML ファイル内のテキストを書式設定する方法を示します...

JS ES6 変数分割代入の詳細な説明

目次1. 脱構築とは何か? 2. 配列の分割3. 配列モードと代入モードの統一4. デフォルト値の構...

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...

Windows7 での Mysql5.7 my.ini ファイルの読み込みパスとデータの場所の変更方法

更新: MySQL の公式 Web サイトにアクセスして MySQL インストーラーをインストールし...

Vue3 がコンポーネント通信に mitt を使用する手順

目次1. インストール2. プロジェクトにインポートしてマウントする3. 使用Vue2.x はコンポ...