JavaScript中this的指向
一句话总结:this指代当前运行环境,即函数或对象当前所在的执行环境。注意注意注意:谁调用,this就指向谁。
由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。
this可以动态的根据当前环境改变它的指向,所以在需要固定this的指向时,可以使用var that = this,固定住this指针。注意:箭头函数本身不带有this,它的this指向为函数声明时所在的区域,不会动态改变!所以在浏览器环境中,触发事件时尽量不要使用箭头函数。
var person = {
name: '张三',
getName: function() {
return this.name; // 张三
}
}
var name = '李四'
var f = person.getName;
f(); // 李四 f是在全局环境中声明,所以this指向window对象
构造函数中的this,指的是实例对象。
var obj = function P(){
this.p = p;
}
var o = new obj('HI');
o.p // HI
如果对象的方法里面包含this,this的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。
闭包中的this指代的也是window对象,例如立即执行函数(俗称小闭包)中的this ,代表的是window全局对象。
闭包的作用:可以在外部访问函数内部的变量,延长变量的作用域。
var a = 3
function getNum() {
console.log(a);
var b =4;
return function getB() {
return b;
}
}
getNum() // 输出3 返回b=4,b变量在函数外部依然可以被访问,且没有随着函数执行完成被销毁。这就是闭包,闭包是一个函数。
通常函数执行一次完成后会销毁函数内部的变量,如果此时是一个闭包,则这个变量不会被销毁,会被保存在内存中,因此闭包容易引起内存泄漏,谨慎使用!

浙公网安备 33010602011771号