首先直接说结果:为什么要使用var me = this保存this指针。一、为了保存this指向,在不同情况下this的指向都是不同的。二、脚本的压缩问题。
一、JavaScript this 关键字指向
java中的this表示当前对象的一个引用。
但是JavaScript中的this不是固定不变的,它会随执行环境的改变而改变的。
1、在对象方法中,this指向调用它所在方法的对象。
2、单独使用this,它指向全局(Global)对象。
3、函数使用中,this指向函数的所属者。
4、严格模式下函数是没有绑定到this上,这时候this是undefined。
5、在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。
6、apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象。
详细概念解释地址—菜鸟教程
这里对常用的1、方法中的this;2、单独使用this;3、事件中使用this。举例子进行解释:
1、方法中的this
<script>
// 创建一个对象
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
// 显示对象的数据
document.getElementById("demo").innerHTML = person.fullName();
</script>
这里fullName是person对象的方法,方法中使用this指向该person对象。这里输出的结果就是John Doe。
2、单独使用this
单独使用 this,则它指向全局(Global)对象。
在浏览器中,window 就是该全局对象为 [object Window]
3、事件中使用this
在HTML事件句柄中,使用this指向了接收事件的HTML元素。如果是button的onclick事件中使用this,那么this指向的就是该button元素。
<button onclick="this.style.display='none'">点我后我就消失了</button>
二、脚本压缩问题
参考:https://blog.csdn.net/iteye_20659/article/details/82524537
实际上就是var me = this保存过后的变量,在压缩之后调用时,调用者就是确定的me,而不是this指针。
//压缩之前
function doA() {
var a = this;
a.a();
a.b();
a.c();
a.d();
}
function doB() {
this.a();
this.b();
this.c();
this.d();
}
//压缩之后
function doA(){var a=this;a.a();a.b();a.c();a.d()};
function doB(){this.a();this.b();this.c();this.d()};