JavaScript:闭包中的this

Posted jkhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript:闭包中的this相关的知识,希望对你有一定的参考价值。

匿名函数的执行环境具有全局性,因此this经常指向window。

 1 var name = "window";
 2 var obj = {
 3   name : "obj",
 4   getName : function(){
 5     return function(){
 6       return this.name;
 7     }
 8   }
 9 };
10 console.log(obj.getName()());

 


以上代码执行结果:

window

闭包的活动对象中的this,有明确指向的只有window。为了解决这个问题,我们可以将外部作用域的this对象保存在一个变量里,就可以让闭包访问了。

 1 var name = "window"
 2 var obj = {
 3     name: ‘obj‘,
 4     get: function() {
 5         var that = this
 6         return function() {
 7             return that.name
 8         }
 9     }
10 }
11 
12 console.log(obj.get()()) // obj

 

console.log(obj.getName()());

以上代码执行结果:

obj
1
因为that是我们在包含函数中特意声明的一个变量,因此闭包可以通过that访问到外部函数的this,即obj。

还有一种特殊情况会使this的值改变

 

 1 var name = ‘window‘
 2 var obj = {
 3     name: ‘obj‘,
 4     get: function() {
 5         return this.name
 6     }
 7 }
 8 
 9 var getname1 = obj.get
10 console.log(obj.get()) // obj
11 console.log(getname1()) // window

 


以上代码执行结果:

obj
window
当把方法赋值给getname2时,由于getname2属于window,因此this的指向就不能得到维持。

以上是关于JavaScript:闭包中的this的主要内容,如果未能解决你的问题,请参考以下文章

JS---闭包

理解 JavaScript 中的 this

一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域

JavaScript this浅析

JavaScript 练习题

JavaScript作用域闭包与this