勉強中にこの問題によく遭遇します。この記事では、それに関連する問題について説明します。
グローバル オブジェクト ウィンドウとしてのこれのいくつかのケース
これは関数呼び出しとしての
これは内部ネストされた関数としての
setTimeout と setInteval では、これは依然としてグローバル変数ウィンドウです
これは非グローバル変数です
Constructor (コンストラクターは関数を通じて新しいオブジェクトを生成します。この時点では、これは新しいオブジェクトを指します)
は次のようなオブジェクト メソッドとして呼び出されます:
var obj1 = { name: 'Byron', fn : function(){ console.log(this); } }; obj1.fn(); // obj1var fn2 = obj1.fn; fn2(); //此时this仍然指的是全局对象window
DOM オブジェクト バインディング イベント これはソース DOM を表しますobject (IE の下位バージョンにはバグがあり、window を指すこともあります)
オリジナルの関数をバインドするには、bind 関数を使用します。このとき、これは、bind に渡される最初のパラメータを参照します。例:
var obj1 = { name: 'Byron', fn : function(){ console.log(this); } }; obj1.fn(); //obj1var fn2 = obj1.fn;
fn2(); //此时this仍然指的是全局对象windowvar fn3 = obj1.fn.bind(obj1);fn3(); //此时this指的为obj1(此方法比较灵活,可利用此方法将所要传送给this 的参数指定为bind的第一个对象) apply和call设置this,如: fn.call(context,num1,num2...);fn.apply(context,numArray)
最初のパラメータはこのオブジェクトです。違いは、call がパラメータ リストを受け入れるのに対し、apply はパラメータ配列を受け入れることです。
caller、関数 f がグローバル スコープで呼び出された場合、f.caller は null になります。逆に、関数が別の関数スコープで呼び出された場合、f.caller はそれを呼び出した関数を指します。呼び出し元が親関数を参照していることだけを理解しました。例:
function fn(){ console.log(fn.caller); function fn2(){ console.log(fn2.caller) } fn2() }
fn(); callee,当函数被调用的时候arguments.callee(匿名函数的时候很好用,可以调用自身) var i = 1;window.onclick = function(){ console.log(1); if(i<5){ i++; setTimeout(arguments.callee,200); }}
この記事では、これに関連する問題について説明します。関連コンテンツの詳細については、php 中国語 Web サイトを参照してください。
関連する推奨事項:
以上がこれに関する関連質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。