this
EC: 現在のコードが実行される環境
- グローバル実行コンテキスト
- プライベート実行コンテキスト
- ブロックレベルのスコープ
this実行主体
関数の実行主体が誰であるかは、関数の定義場所や実行場所とは必ずしも関係ありません。
- 1. this:実行主体がオブジェクトデータ型
- 2.メソッドの実行は、"ポイント "の前にメソッドがあるかどうかを確認し、"ポイント"、"ポイント "の前に誰が、thisです。「ポイント "は、"ポイント "誰の前に、this誰です。"ポイント "は、this一般的にウィンドウを指していない/未定義
- 3.厳格なモードでは、メソッドの実行は、前面のない場合は、つまり、本体の実装がないので、thisUNDEFINEDです;
1.イベントバインディングの間、関数は実行されず、ただ作成され、thisは "console.log(this) "という文字列のヒープです;"; イベントがトリガーされた時のみ、ブラウザはバインドされたメソッドを実行します。
var box = document.getElementById('box');
box.onclick = function () {
console.log(this);
//=>onclick時間がトリガーされない、関数が実行されない、thisは'console'である。.log(this); '
};
2.要素のイベントビヘイビアにメソッドをバインドし、ビヘイビアがトリガーされ、メソッドが実行されるとき、メソッド内の thisと "general "はすべて現在の要素そのものです。関数が実行されたとき、つまりonclickがクリックされたとき、thisは: box
var box = document.getElementById('box');
box.onclick = function () {
console.log(this); //=>関数が実行されるとき、thisは#BOX要素オブジェクト
};
3.関数が実行されると、thisはボックスのドットの前にいる人、thisはボックスのドットの前にいる人。
var box = document.getElementById('box');
box.onclick = function () {
console.log(this); //=>関数が実行されるとき、thisは#BOX要素オブジェクト
};
4.機能の実行と非実行の「これ」は誰ですか?
function func() {
console.log(this);
return function anonymous() {};
}
box.onclick = func;
//=>func関数自体を要素のイベントビヘイビアに割り当て、イベントバインディングを完了する;
要素がクリックされると、メソッドfuncが実行される。
box.onclick = func();
//=>最初のfuncの実行、要素クリックの振る舞いへの代入によって返された結果の関数実行
=>box.onclick=function anonymous() {} 要素をクリックすると匿名メソッドが実行される。
5.特殊な場合、このthisは要素そのものではありません。
- ブラウザのIE6~8低バージョンは、attachEvent DOM2イベントバインディング、イベントトリガ、メソッドの実行に基づいて、メソッド thisは、要素自体ではなく、ウィンドウvar box = document.getElementById('box'); var box = document.
var box = document.getElementById('box');
box.attachEvent('onclick', function () {
console.log(this === window); //=>trueつまり、この時点で thisはウィンドウ
});
6.実関数:点 thisの前にないボディの実装はwindow、点 thisの前にあるボディの実装はobj
function func() {
console.log(this);
}
var obj = {
fn: func
};
func(); //=>メソッド中の thisはWINDOWである。
obj.fn(); //=>メソッド thisはOBJである。*/
7.自己実行関数の thisは: wiondow。
(function () {
console.log(this);
})();
// (function () {}) 無名関数を作る
// () 作成した無名関数を実行する
// 作成と実行が一緒になっているので、「自己実行関数」と呼ばれる。”thisのthisは一般的にWINDOWである。
8.厳密モードでは、メソッドは実行されます。
- 1.前に点がない、つまり実行主体がないので、thisは未定義。
- 2.ポイントがある場合、そのポイントの前にthisが誰であるかを示します。
"use strict";
(function () {
console.log(this); //=>undefined
})();
function func() {
console.log(this);
}
var obj = {
fn: func
};
func(); //=>メソッド中の thisはundefinedである。
obj.fn(); //=>メソッド thisはOBJである。
9.
function func() {
console.log(this.name);//関数は実行されず、thisは'console'である。.log(this.name);'
}
var box = document.getElementById('box');
box.name = "#BOX";
var name = "WINDOW"; //=>window.name = "WINDOW"
var obj = {
name: "OBJ",
func: func
};
func(); //=>関数コンソールを実行する.log(this.name)=window.name = "WINDOW"
obj.func(); //=>はobjのfuncを実行し、実行されたfuncは関数である。
,そのまま関数を実行する,console.log(this.name);=obj.name="OBJ"
box.onclick = func; //=>BOXをクリックするとFUNCが実行される。#BOX"
box.onmouseenter = function () {
// マウスがボックスに入り、無名関数の実行がトリガーされ、無名関数の thisは未定義となる。=>BOX
// 無名関数の実行中にFUNC関数が実行されるが、このときFUNCのthisは未定義である。=>WINDOW
func();
};





