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 水平線分

推薦する

私の CSS フレームワーク - base.css (ブラウザのデフォルト スタイルをリセット)

コードをコピーコードは次のとおりです。 @文字セット "utf-8"; /* @...

MySQL で lower_case_table_names を記録する際の落とし穴の詳細な説明

1 原因プロジェクトがデータベースを移行して再起動した後、「T_AAAテーブルが存在しません」という...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

デザイナーと開発者に役立つ 9 つの超実用的な CSS のヒント

Web デザイナーの頭の中には、仕事に関連する多くの知識が詰まっている必要があります。 CSS は、...

大量のデータを含むエレメントのシャトルボックスで「すべて選択」をクリックするとスタックする問題の解決方法

目次解決策1: EUIの転送コンポーネントをコピーして変更し、プロジェクトディレクトリに導入する解決...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

Dockerfileを使用して独自のイメージを作成する方法

1. 空のディレクトリを作成する $ cd /home/xm6f/dev $ mkdir myapp...

ローカル yum ソースの設定、国内 yum ソースの設定、epel ソースの設定を行う Linux の手順

1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...

CSS 3D からソースコードによる空間座標軸へ

かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...

MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...

MySQLにログインする際のエラー「ERROR 1045 (28000)」を解決する方法

今日はサーバーにログインして、データベース内のいくつかのものを変更する準備をしました。しかし、パスワ...