这个问题并不仅限于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
也应该以相同的方式进行别名处理。