通俗理解js中的this

2018-01-13 11:03:33来源:网络收集作者:程序诗人人点击

分享

阿里云爆款

关于this的解读在网上不要太多。不过就是太长了,看着头疼。这里用尽量短的篇幅帮助分辨出this究竟指向谁。


一句话,this指向调用时的执行环境。


1、在非严格模式下,当this处于一个全局函数(该函数没有内嵌函数)中,那么在window中调用该函数时,this指向window。因为window是该全局函数的执行环境。(这里在严格模式下显示undefined,因为在严格模式下,如果this未在执行的上下文中定义,它将会默认为undefined。)如下:


function a(){
var user = "Jane";
console.log(this.user); //undefined
console.log(this); //Window
}
a();a为全局函数,毫无疑问在window里执行,因此this指向window。this.user即window.user,很明显没有user这样一个全局变量。所以undefined。

2、当this处于闭包中。


(1)情况1,由最外层函数一层层调用。则this所在函数的上一层对象就是执行环境,而不会向上追溯(这点和作用域链不一样)。如下:


var o = {
a:10,
b:{
a:20,
fn:function(){
console.log(this.a); //20
}
}
}
o.b.fn();这里的this所在的fn函数又是处在对象b(为对象b的方法)中,因此,执行环境就是b。如果b中没有,则不找了,为undefined。如下var o = {
a:10,
b:{ fn:function(){
console.log(this.a); //undefined
}
}
}
o.b.fn();(2)情况2,当闭包被赋予一个全局变量时,在调用时执行环境为window(非严格模式下)。
var o = {
a:10,
b:{
a:20,
fn:function(){
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var p = o.b.fn;
p();

var p = o.b.fn;  即把闭包函数fn内容赋值给p了。


然而在调用时,执行环境是window,因此this指向window。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台