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でjsonpを使用する方法

目次1. はじめに2. インストール3. 使用4. vueファイルの使用1. はじめに最近、手書き入...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

HTMLのタグについての簡単な説明

0. タグとは何ですか? XML/HTML コードコンテンツをクリップボードにコピー<入力 t...

vue-nuxt ログイン認証の実装

目次導入リンク始めるコードを読み進めてくださいプロキシ設定傍受を要求する異なるプレフィックスを持つイ...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

シンプルな商品スクリーニング機能を実現するjs

この記事の例では、商品スクリーニング機能を実装するためのjsの具体的なコードを参考までに共有していま...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

CSS の境界線を通して三角形と矢印を実装するサンプルコード

1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...

CSS の 4 つのインポート方法と優先順位の簡単な分析

第一に: CSSを導入する4つの方法CSS を導入する方法には、インライン スタイル、埋め込みスタイ...

W3C チュートリアル (4): W3C XHTML アクティビティ

HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

TypeScript名前空間の説明

目次1. 定義と使用1.1 定義1.2 使用2. 複数のファイルに分割する3. エイリアス序文: T...

CentOS 7.x に ZSH ターミナルをインストールする方法

1. 基本コンポーネントをインストールするまず、 yumコマンドを実行して、コードpullために必要...

Vue がコンポーネント通信を実装する 8 つの例

目次1. Props 親コンポーネント ---> 子コンポーネント通信2. $emit 子コン...

MySQLの制限を使用して大規模なページングの問題を解決する方法

序文日常の開発では、MySQL を使用してページングを実装する場合、常に MySQL 制限構文を使用...