この質問はjQueryに固有のものではなく、JavaScript全般に固有のものです。中心的な問題は、組み込み関数で変数を「チャネル化」する方法です。これは例です:
var abc = 1; // we want to use this variable in embedded functions
function xyz(){
console.log(abc); // it is available here!
function qwe(){
console.log(abc); // it is available here too!
}
...
};
この手法は、クロージャーの使用に依存しています。ただし、スコープごとに動的に変化する可能性がある疑似変数であるthis
ため、これは機能しませんthis
。
// we want to use "this" variable in embedded functions
function xyz(){
// "this" is different here!
console.log(this); // not what we wanted!
function qwe(){
// "this" is different here too!
console.log(this); // not what we wanted!
}
...
};
私たちは何ができる?それをいくつかの変数に割り当て、エイリアスを通じて使用します。
var abc = this; // we want to use this variable in embedded functions
function xyz(){
// "this" is different here! --- but we don't care!
console.log(abc); // now it is the right object!
function qwe(){
// "this" is different here too! --- but we don't care!
console.log(abc); // it is the right object here too!
}
...
};
this
この点で一意ではありませんarguments
。エイリアスによって、同じように処理する必要がある他の疑似変数です。
self
があるので避けてwindow.self
ください。独自のself
var を宣言し忘れた場合(たとえば、コードを移動するときなど)、誤ってそれを使用してしまう可能性があります。これは、見つけたりデバッグしたりするのが面倒です。のようなものを使用することをお勧めします_this
。